java继承向上向下转型_Java - 关于子类父类的向上转型,向下转型

以下Animal为父类,Dog,Cat作为子类,分别继承Animal

classAnimal{public voidshout(){

System.out.println("叫了一声");

}

}class Dog extendsAnimal{public voidshout() {

System.out.println("旺旺旺");

}public voidseeDoor() {

System.out.println("看门中");

}

}class Cat extendsAnimal{public voidshout() {

System.out.println("喵喵喵");

}

}

总结:

1. Dog对象转成Animal对象可行,如d2

Cat对象转成Animal对象可行,如c2

2. d2作为Animal对象转成Dog对象可行。如d3,且可执行一个Dog特有的方法

3. c2作为Animal对象转成Dog对象,编译通过,运行报错,显示 java.lang.ClassCastException,类型转化出错

实例代码:

1. Dog对象转成Animal对象可行,如d2

Cat对象转成Animal对象可行,如c2

public classTestPoym{public static voidmain(String[] args) {

Dog d1= newDog();

animalCry(d1);

Animal d2= new Dog(); //向上转型

animalCry(d2);

Animal c1 = new Cat();

animalCry(c1);

Animal c2 = new Cat();

animalCry(c2);

}static voidanimalCry(Animal a) {

a.shout();

}

}

结果:

51171ff4b4aa2dd566db270b2b8e1556.png

2. d2作为Animal对象转成Dog对象可行。如d3,且可实现一个Dog特有的方法,看门

public classTestPoym{public static voidmain(String[] args) {

Dog d1= newDog();

animalCry(d1);

Animal d2= new Dog(); //向上转型

animalCry(d2);

Animal c1= newCat();

animalCry(c1);

Animal c2= newCat();

animalCry(c2);

Dog d3= (Dog)d2; //向下转型

d3.seeDoor();

}static voidanimalCry(Animal a) {

a.shout();

}

}

结果:

bf79071682ee73167722ff63ab1c95be.png

3.  c2作为Animal对象转成Dog对象,编译通过,运行报错,显示 java.lang.ClassCastException,类型转化出错

代码:

public classTestPoym{public static voidmain(String[] args) {

Dog d1= newDog();

animalCry(d1);

Animal d2= new Dog(); //向上转型

animalCry(d2);

Animal c1= newCat();

animalCry(c1);

Animal c2= newCat();

animalCry(c2);

Dog d3= (Dog)d2; //向下转型

d3.setDoor();

Dog c3= (Dog)c2; //编译通过,运行出错,显示强制转换出错

}static voidanimalCry(Animal a) {

a.shout();

}

}

结果:

81af5da74b342e592209e18f3e9cb93a.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值