类的多态案例

package test1;
public class aaa1 {
public static void main(String[] args) {
/*Animal a=new Animal();
a.eat();

cat c=new cat();
c.eat();

dog d=new dog();
d.eat();*/

Animal a1=new cat();
//cat类型转换成Aniamle类型,小的变成大的,是向上的自动的类型转换
//父类型的引用指向子类型对象,程序分两个阶段,编译阶段,运行阶段
//程序在编译阶段只知道a1是一个Animal类型,在运行的时候堆中的实际对象是cat类型
//在编译阶段a1引用绑定的是Animal类型中的eat方法(静态绑定)
//而程序在运行阶段堆中的对象实际是cat类型,而cat已经重写了eat方法
//所以程序在运行阶段对象的绑定方法是cat中的eat方法(动态绑定 )
a1.eat();

Animal a2=new cat();
cat c1=(cat) a2;
c1.move();

/*Animal a3=new dog();
cat c2=(cat) a3;*/

//为了避免classcastexception的发生,java引入了instanceof
//用法:计算结果为boolean,为true/false
//(引用 instanceof 类型)--->true/false
//如果结果是true,说明a引用指向堆中的对象是cat类型

Animal a3=new dog();
System.out.println(a3 instanceof cat);    //在做向下转型的时候,要用instanceof
if (a3 instanceof cat){ 
cat c2=(cat) a3;
}
}
}


class Animal {
public void eat() {
System.out.println("好吃");  
}
}


class cat extends Animal{

public void eat(){
System.out.println("猫吃鱼");
}

public void move(){
System.out.println("猫走猫步");
}

}


class dog extends Animal{
public void eat(){
System.out.println("狗啃骨头");
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值