子类转父类 (父类引用指向子类对象)

子类可以转换为父类,如下父类FruitTest与其子类AppleTest

class FruitTest {
    String str = "FruitTest";
    public String get() {return str;}
    public void set(String str) {this.str = str;}

}

class AppleTest extends FruitTest {
    String str = "AppleTest";
}

FruitTest obj = new AppleTest();

obj.str 结果为"FruitTest",不是子类中的str("AppleTest")。obj的属性变量都是父类的。

obj.get() 得到的是"FruitTest",执行的是父类中的方法,但若是子类重写了父类方法,执行的则是子类的方法

class AppleTest extends FruitTest {
    String str = "AppleTest";
    public String get() {return str;};
}

则obj.get()得到的是"AppleTest" 。

总结:子类可以转换为父类,即父类引用指向子类对象。引用的属性是父类的,方法若果被子类重写则是子类的方法。

 

父类转子类(子类引用指向父类对象)

父类不可以直接转换为子类,AppleTest obj = new FruitTest();  是错误的。

AppleTest obj = (AppleTest) new FruitTest(); 编译时也会报错。

 

FruitTest obj = new AppleTest();
AppleTest test = (AppleTest)obj;  这两句是正确的。

父类若转换为子类,父类引用必须指向的是一个子类对象。实质上是将一个指向子类对象的父类引用改为了子类引用。