/*
向上转型是子类以父类的身份去执行。
强制将父类的引用,为向下转型。
自始至终都是子类在变化。
*/
package demo;
abstract class Animal {
abstract void eat();
}
package demo;
public class Cat extends Animal{
@Override
void eat() {
System.out.println("吃鱼");
}
void chang() {
System.out.println("唱");
}
}
package demo;
public class Dog extends Animal{
@Override
void eat() {
System.out.println("吃骨头");
}
void kanJia() {
System.out.println("看家");
}
}
package demo;
public class Test {
public static void main(String[] args) {
/*
* Cat c=new Cat(); c.eat(); c.chang(); Dog d=new Dog(); d.eat(); d.kanJia();
*/
Function(new Cat()); //此处采用Animal a=new Cat();的方式是向上转向,以父类的身份去执行。
Function(new Dog());
}
public static void Function(Animal a) {
if(a instanceof Cat) { //此处是判断如果a是cat的实例,执行猫的操作。为向下转型。
Cat c=(Cat)a;
c.eat();
}else if(a instanceof Dog) {
Dog d=(Dog)a;
d.eat();
}
}
}