先定义一个Fruit()类,在类中分别编写big(),mid(),small()方法。再定义一个Apple()类,该类中重写mid()方法,并写一个子类特有的sweet()方法。然后编写测试类Test(),在Test类中先进行向上转型再向下转型。直接上代码。
public class Fruit {
public void big(){
System.out.println("大水果");
}
public void mid(){
System.out.println("中型水果");
}
public void small(){
System.out.println("小水果");
}
}
public class Apple extends Fruit{
public void mid(){
System.out.println("中型水果哈哈哈");
}
public void sweet(){
System.out.println("苹果很甜");
}
}
public class Test {
public static void main(String[] args) {
Fruit apple01 = new Apple();//上转型
//我们尝试调用两个Apple类的方法,发现调用不到sweet()方法(这个为子类特有的方法)
apple01.mid();
//apple01.sweet();
//我们将编译类型转成Apple 父类的引用指向的是当前目标类型的对象
Apple apple02 =(Apple) apple01;
apple02.sweet();//成功调用到sweet()方法
}
}
运行结果如下
中型水果哈哈哈
苹果很甜
总结
语法:子类类型 引用名 = (子类类型) 父类引用
只能强转父类的引用,不能强转父类的对象
要求父类的引用指向的是当前目标类型的对象
向下转型后,可以调用子类类型中所有的成员