1.对象的向上转型(也就相当于多态的格式)
格式:
父类名称 对象名称 = new 子类名称();
2.对象的向下转型(将父类对象还原为子类对象,可以拥有子类的特有方法)
格式:
子类名称 对象名称=(子类名称) 父类对象名称();
注意:如果有多个子类,向下转型时千万要注意,子类名称要是对应的向上转型时使用的子类名称,不可以为其它子类名称,否则会出现ClassCastException(类转换异常)
public class animal {
public void eat() {
System.out.println("吃东西");
}
}
public class Cat extends animal{
public void eat() {
System.out.println("猫吃鱼肉");
}
public void sleep() {
System.out.println("小猫咪睡觉了!");
}
}
public class Dog extends animal{
public void eat() {
System.out.println("狗狗吃骨头头");
}
public void sleep() {
System.out.println("狗狗睡觉了!!!!!");
}
}
public class testanimal {
public static void main(String[] args) {
//向上转型创建对象mao
animal mao=new Cat();
//调用了覆盖重写的父类方法
mao.eat();
System.out.println();
//向下转型对象mao,创建对象s
Cat s=(Cat) mao; //注意,子类名称要为对应的向上转型时的子类名称Cat
//调用覆盖重写的父类方法
s.eat();
//调用子类的特有方法
s.sleep();
System.out.println("==============");
//向上转型创建对象dog
animal dog=new Dog();
//调用覆盖重写的父类方法
dog.eat();
System.out.println();
//向下转型对象dog,创建对象x
Dog x=(Dog) dog; //注意,子类名称要为对应的向上转型时的子类名称Dog
//调用覆盖重写的父类方法
x.eat();
//调用子类特有的方法
x.sleep();
}
}