class A {
void fun1() {
System.out.println(fun2());
}
int fun2() {
return 123;
}
}
public class B extends A {
int fun2() {
return 456;
}
public static void main(String argv[]) {
A a;
B b = new B();
b.fun1();
a = b;
a.fun1();
}
}
执行结果:456 456 注意:父类和子类必须在同一个包中 父类的方法才会被覆盖,父类的方法被覆盖后,
无论在子类的方法中调用还是在父类的方法中调用都是调用子类的方法(main方法无论在哪)
实例化子类,首先会调用父类的静态代码块 子类本身的静态代码块 父类构造器 子类构造器
class Data {
int val;
int getVal() {
return val;
}
void setVal(int val) {
this.val = val;
}
}
public class ListTest {
public static void main(String argv[]) {
Data data = new Data();
ArrayList list = new ArrayList();
for (int i = 100; i < 103; i++) {
data.setVal(i);
list.add(data);
}
int j = 0;
while (j < list.size()) {
Data tmp = (Data) list.get(j);
System.out.println("list(" + j + ") = " + tmp.getVal());
j++;
}
}
}
执行结果:102 102 102 若将Data data = new Data();移入for循环里面 则执行结果为 100 101 102
因为是同一个对象 所以值会相等