日期:2014-05-20  浏览次数:20697 次

java中继承的问题
public class TestExtend extends Base {
  public static void main(String[] args) {
  Base b = new TestExtend();
  b.amethod();
  }
 
  @Override 
  public void amethod() {
  System.out.println("Driv..");
  }
 }
 
class Base {
  Base() {
  amethod();
 }
  public void amethod() {
  System.out.println("Base ");
  }
 }
 

------解决方案--------------------
Driv..
Driv..
据我理解,因为TestExtend继承了父类Base,覆写了amethod()方法
,所以子类的构造函数super()方法也覆写了父类构造函数里的amethod()方法
对象b是TestExtend类对象,在new的时候调用构造函数输出第一个Driv..
第二Driv..是TestExtend类实例的amethod方法
------解决方案--------------------
探讨

Driv..
Driv..
据我理解,因为TestExtend继承了父类Base,覆写了amethod()方法
,所以子类的构造函数super()方法也覆写了父类构造函数里的amethod()方法
对象b是TestExtend类对象,在new的时候调用构造函数输出第一个Driv..
第二Driv..是TestExtend类实例的amethod方法

------解决方案--------------------
new TestExtend();构造子类对象时,需要先构造父类对象,父类构造方法中调用了被子类重写过的amethod();方法,所以在创建父类对象时会直接调用子类覆写过的amethod();方法。
b.amethod();直接调用子类覆写过的amethod();方法。多态的特性而已
------解决方案--------------------
方法的多态。
------解决方案--------------------
public static void main(String[] args) {
Base b = new TestExtend();
//调用Base的构造方法,构造方法里面调用method()方法,但method()方法被子类重写,打印driv..
b.amethod();
//再次调用重写后的method(),打印driv...
}