java 使用class转型_Java中的对象转型

本文通过实例讲解了Java中如何使用class进行对象转型,并展示了多态的应用。通过创建Animal类及其子类Cat、Dog和Bird,展示了子类对象可以被赋值给父类引用,使得程序更具灵活性。在Lady类中,宠物对象被声明为Animal类型,允许传入各种类型的子类对象。在main方法中,创建了不同种类的宠物并由不同的Lady对象抚养,展示了多态调用enjoy方法的效果。
摘要由CSDN通过智能技术生成

classAnimal {privateString name;/*** 在Animal类自定义的构造方法

*@paramname*/Animal(String name) {this.name =name;

}/*** 在Animal类里面自定义一个方法enjoy*/

public voidenjoy() {

System.out.println("动物的叫声……");

}

}class Cat extendsAnimal {privateString eyesColor;/*** 在子类Cat里面定义Cat类的构造方法

*@paramn

*@paramc*/Cat(String n, String c) {/*** 在构造方法的实现里面首先使用super调用父类Animal的构造方法Animal(String name)。

* 把子类对象里面的父类对象先造出来。*/

super(n);

eyesColor=c;

}/*** 子类Cat对从父类Animal继承下来的enjoy方法不满意,在这里重写了enjoy方法。*/

public voidenjoy() {

System.out.println("我养的猫高兴地叫了一声……");

}

}/*** 子类Dog从父类Animal继承下来,Dog类拥有了Animal类所有的属性和方法。

*@authorgacl

**/

class Dog extendsAnimal {/*** 在子类Dog里面定义自己的私有成员变量*/

privateString furColor;/*** 在子类Dog里面定义Dog类的构造方法

*@paramn

*@paramc*/Dog(String n, String c) {/*** 在构造方法的实现里面首先使用super调用父类Animal的构造方法Animal(String name)。

* 把子类对象里面的父类对象先造出来。*/

super(n);

furColor=c;

}/*** 子类Dog对从父类Animal继承下来的enjoy方法不满意,在这里重写了enjoy方法。*/

public voidenjoy() {

System.out.println("我养的狗高兴地叫了一声……");

}

}/*** 子类Bird从父类Animal继承下来,Bird类拥有Animal类所有的属性和方法

*@authorgacl

**/

class Bird extendsAnimal {/*** 在子类Bird里面定义Bird类的构造方法*/Bird() {/*** 在构造方法的实现里面首先使用super调用父类Animal的构造方法Animal(String name)。

* 把子类对象里面的父类对象先造出来。*/

super("bird");

}/*** 子类Bird对从父类Animal继承下来的enjoy方法不满意,在这里重写了enjoy方法。*/

public voidenjoy() {

System.out.println("我养的鸟高兴地叫了一声……");

}

}/*** 定义一个类Lady(女士)

*@authorgacl

**/

classLady {/*** 定义Lady类的私有成员变量name和pet*/

privateString name;privateAnimal pet;/*** 在Lady类里面定义自己的构造方法Lady(),

* 这个构造方法有两个参数,分别为String类型的name和Animal类型的pet,

* 这里的第二个参数设置成Animal类型可以给我们的程序带来最大的灵活性,

* 因为作为养宠物来说,可以养猫,养狗,养鸟,只要是你喜欢的都可以养,

* 因此把它设置为父类对象的引用最为灵活。

* 因为这个Animal类型的参数是父类对象的引用类型,因此当我们传参数的时候,

* 可以把这个父类的子类对象传过去,即传Dog、Cat和Bird等都可以。

*@paramname

*@parampet*/Lady(String name, Animal pet) {this.name =name;this.pet =pet;

}/*** 在Lady类里面自定义一个方法myPetEnjoy()

* 方法体内是让Lady对象养的宠物自己调用自己的enjoy()方法发出自己的叫声。*/

public voidmyPetEnjoy() {

pet.enjoy();

}

}public classJerque {public static voidmain(String args[]) {/*** 在堆内存里面new了一只蓝猫对象出来,这个蓝猫对象里面包含有一个父类对象Animal。*/Cat c= new Cat("Catname", "blue");/*** 在堆内存里面new了一只黑狗对象出来,这个黑狗对象里面包含有一个父类对象Animal。*/Dog d= new Dog("Dogname", "black");/*** 在堆内存里面new了一只小鸟对象出来,这个小鸟对象里面包含有一个父类对象Animal。*/Bird b= newBird();/*** 在堆内存里面new出来3个小姑娘,名字分别是l1,l2,l3。

* l1养了一只宠物是c(Cat),l2养了一只宠物是d(Dog),l3养了一只宠物是b(Bird)。

* 注意:调用Lady类的构造方法时,传递过来的c,d,b是当成Animal来传递的,

* 因此使用c,d,b这三个引用对象只能访问父类Animal里面的enjoy()方法。*/Lady l1= new Lady("l1", c);

Lady l2= new Lady("l2", d);

Lady l3= new Lady("l3", b);/*** 这三个小姑娘都调用myPetEnjoy()方法使自己养的宠物高兴地叫起来。*/l1.myPetEnjoy();

l2.myPetEnjoy();

l3.myPetEnjoy();

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值