class X : value and child ========================== /* class H { public String toString() { return "cs2312";} } public class Main{ public static void main(String[] args) { H obj = null; System.out.println(obj); } } */ class X { private int xValue; private X xChild; public X(int xValue, X xChild) { this.xValue = xValue; this.xChild = xChild; } public String toString() { return xChild + " " + xValue; } } public class Main { public static void main(String[] args) { // X obj = null; X obj = new X(99, new X(88, new X(77, null))); System.out.println(obj); } } class X: doSomething()- sees 3 objects ====================================== class X { private int data; public X(int d) {data=d*2;} public String toString() {return ""+data;} //a trick to make a string quickly public void doSomething(X r) { X s = new X(8); System.out.println(this.data); System.out.println(r.data); System.out.println(s.data); } } public class Main { public static void main(String[] args) { X a = new X(1); X b = new X(15); a.doSomething(b); } } setName() ===================== class Employee { private String id, name; public Employee(String aId, String aName) { id= aId; name = aName; } public String toString() { return id + ": " + name; } public void setName(String newName) { name = newName; } } public class Main { public static void main(String[] args) { Employee e = new Employee("001", "Carl Cracker"); e.setName("Helena"); System.out.println(e); // [Output] 001: Helena } } static and non-static methods ============================= class A { public int x1; public static int x2; public void m1() { m2(); } public static void m2() { x2+=100; } } public class Main { public static void main(String[] args) { (new A()).m1(); (new A()).m1(); } } // public static void m2() { // //x1+=100; //<== this is invalid. [line X1] // x2+=100; // //m1(); //<== invalid [line X2] // } RandomNumber ============ class RandomNumber { private int r=(int)(Math.random()*100); //0..99 public RandomNumber(int n) { r=(int)(Math.random()*n); } public String toString() {return ""+r;} } public class Main { public static void main(String[] args) { // System.out.println(new RandomNumber(1000)); //Expected: 0..999 [OK] // System.out.println(new RandomNumber()); //Expected: 0..99 [ERROR!] } } Basic Casting ============= public class Main { public static void main(String [] args) { int i=97; char c; c=(char)i; System.out.println(i); //output: 97 System.out.println(c); //output: a } } Inheritance and Casting ======================= class A { public String f1() { return "A solution";} } class B extends A { public String f1() { return "Best solution";} } public class Main { public static void main(String [] args) { go(new B()); } public static void go(A x) { String result1 = ((B)x).f1(); //"A solution" or "Best solution"? String result2 = x.f1(); //"A solution" or "Best solution"? System.out.println(result1 + ", " + result2); } } Up-casting, Down-casting ================================= class A { private int x; public A() { x = 100; } public void m1() { System.out.println(x); } } class B extends A { private int y; public B() { y = 200; } public void m1() {System.out.println(y);} } public class Main { public static void main(String[] args) { A i = new A(); B j = new B(); // Testing i.m1(); j.m1(); ((A)j).m1(); ((B)i).m1(); // B k = (B)i; // <=== error here? // k.m1(); // <=== error here? } } Object, Casting ================ public class Main { public static void main(String[] args) { Integer i=3; //line 1 String s; //line 2 s = (String)i; //line 3 Object o; //line 4 o = i; //line 5 i = (Integer)o; //line 6 } } for-each loop, Integer, ArrayList ================================= import java.util.*; public class Main { public static void main(String[] args) { Integer[] arr = new Integer[3]; // Simply treat Integer as int (See Topic 04) arr[0] = 100; arr[1] = 101; arr[2] = 109; ArrayList alist = new ArrayList(); alist.add(100); alist.add(101); alist.add(109); for (int i = 0; i < arr.length; i++) System.out.print(arr[i] + " "); System.out.println(); for (int i = 0; i < alist.size(); i++) System.out.print(alist.get(i) + " "); } } for-each loop, Run-time Problem : ConcurrentModificationException ================================================================== import java.util.*; public class Main { public static void main(String[] args) { Integer[] arr = new Integer[3]; // Simply treat Integer as int (See Topic 04) arr[0] = 100; arr[1] = 101; arr[2] = 109; ArrayList alist = new ArrayList(); alist.add(100); alist.add(101); alist.add(109); // printing using toString System.out.println(Arrays.toString(arr)); // output: [100, 101, 109] System.out.println(alist.toString()); // output: [100, 101, 109] System.out.println(); System.out.println(); // Try to change element values for (Integer e : arr) e++; for (Integer e : alist) e++; System.out.println(Arrays.toString(arr)); // output:____________________ System.out.println(alist.toString()); // output:____________________ System.out.println(); System.out.println(); // Try to change add or remove element in arraylist for (Integer e : alist) { if (e == 109) alist.add(110); } for (Integer e : alist) { if (e == 109) alist.remove(e); } System.out.println(Arrays.toString(arr)); // output:____________________ System.out.println(alist.toString()); // output:____________________ } }