public class DuoTai_ZhuanXing_02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//Animal c=new Cat(); //类型提升。向上转型
//c.eat();
//如果想要调用猫的特有方法时,如何操作?
//强制将父类的引用转成子类类型,向下转型
//Cat cat=(Cat)c;
//cat.catchMouse();
//千万不要出现这样的操作,就是将父类对象转成子类类型。
//我们能转换的是父类引用指向了自己的子类对象时,该引用可以被提升,也可以被强制转换。
//多态自始至终都是子类对象在做着变化
function(new Cat());
function(new Dog());
}
public static void function(Animal a){ //Animal a=new Cat(); Cat c=(Cat)a;
a.eat();
if(a instanceof Cat){
Cat c=(Cat)a;
c.catchMouse();
}else if(a instanceof Dog){
Dog d=(Dog)a;
d.kenBone();
}
}
}
abstract class Animal1{
abstract void eat();
}
class Cat1 extends Animal1{
public void eat(){
System.out.println("eat fish");
}
public void catchMouse(){
System.out.println("抓老鼠");
}
}
class Dog1 extends Animal1{
void eat() {
System.out.println("eat bone");
}
public void kenBone(){
System.out.println("啃骨头");
}
}
class Pig1 extends Animal1{
void eat(){
System.out.println("饲料");
}
public void gongDi(){
System.out.println("拱地");
}
}