class A { public int Avar; public A() { System.out.println("AAA"); doSomething(); } public void doSomething() { Avar = 1111; System.out.println("A.doSomething()"); } } public class B extends A { public int Bvar = 2222; public B() { System.out.println("BBB"); doSomething(); System.out.println("Avar=" + Avar); } public void doSomething() { System.out.println("Bvar=" + Bvar); } public static void main(String[] args) { new B(); } }讲解:
AAA
Bvar=0
BBB
Bvar=2222
Avar=0
注意:初始化顺序,当继承时,先生成超类对象,生成对象时,先生成静态变量,然后是一般变量,然后调用构造器!当所以超类对象生成后,生成本对象,顺序一样! 当方法被覆盖时,调用目前对象的方法!这得注意。
下面这个题目你能选对答案吗?:
What will happen when you attempt to compile and run the following code? class Base { int i = 99; public void amethod() { System.out.println("Base.amethod()"); } Base() { amethod(); } } public class Derived extends Base { int i = -1; public static void main(String argv[]) { Base b = new Derived(); System.out.println(b.i); b.amethod(); } public void amethod() { System.out.println("Derived.amethod()"); } } A. Derived.amethod() -1 Derived.amethod() B. Derived.amethod() 99 Derived.amethod() C. 99 Derived.amethod() D. Compile time error
↑返回目录
前一篇: Java通过命令行取得MAC地址
后一篇: java实现的简单的端口扫描程序