public class TestPoly_2 { } class A { }
class B extends A {
public void f() public void f() { }
System.out.println(\
//m函数可以实现调用整个A类族所有对象f方法的功能 public static void m(A aa) { }
public static void main(String[] args) { }
A aa = new A(); B bb = new B(); C cc = new C(); m(aa); m(bb); m(cc); aa.f();
}
{ }
public void g() { }
System.out.println(\哈哈\System.out.println(\
public class TestPoly_4 { } /* */ class A {
A() {
2008年6月6日8:42:07 super的使用
public static void main(String[] args) { }
A aa = new B();//等价于 A aa; aa = new B(); aa.f();
//aa.g(); //error
}
}
System.out.println(\
A(int i) { }
class B extends A {
B() {
super(2); //如果把该语句注释掉的化,则编译器默认的是自动隐藏调用
super(); 但如果父类没有无参的构造函数,则会报错 }
class C extends B {
C() {
//int k = 10; //如果该语句生效 则会出错,因为会导致super()语句不
}
//一个子类的构造函数中只能出现一个 super(....)
System.out.println(\
是构造函数的第一条语句
super(); //35行 每个子类构造方法的第一条语句,都是隐含地调用
super(),如果父类没有无参的构造函数,那么在编译的时候就会报错。
//super();语句可以写,也可以不写,不写的化,系统
会自动调用的
//如果显示写出来的话,编译器要求该语句前面不能加
任何语句,也就是说该语句必须保证是第一条语句
// super()也可以改为super(2); 但前提是父类必须有带
一个参数的构造函数,否则也会报错 }
class TestSuper_1 { } /*
在j2sdk1.4.2_16中的运行结果是: } }
System.out.println(\
//如果把35行改为 super(2); 编译时就会报错!
public static void main(String[] args) {
C cc = new C();
//System.out.println(\
----------------------- BBBB CCCC
-----------------------
总结:
1、每个子类构造方法的第一条语句,都是隐含地调用super(),如果父
类没有这种形式的
2、如果显示的写出super();语句,则必须保证该语句是第一条语句,
构造函数,那么在编译的时候就会报错。
否则会出错
3、super();如果不写,则编译器会自动添加,所以此时如果父类没有无
参的构造函数就会出错
5、调用父类的构造函数的语句必须借助于super,不能直接写父类的类
4、既可以显示写super();前提是父类必须有无参的构造函数 也可以显示写super(实参); 前提是父类必须有带参的构造函数
名,这与C++不同, */ class A { }
class B extends A {
A(int i) { }
this.i = i;
public int i;