Java 学习博客_9 入门——多态

本文探讨了Java中的多态性概念,包括父类引用指向子类对象时成员变量和方法的访问特点。在多态中,成员变量的访问遵循父类定义,而方法调用则依据实际对象的类型。通过AnimalOperator类的例子展示了如何调用子类重写的方法,强调了多态提升程序拓展性的优点。同时,解释了如何通过转型来访问子类特有的方法,以及转型时的注意事项,防止出现ClassCastException。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

同一个对象在不同时刻表现出的形态也不同。

Cat c=new Cat();
Animal a=new Cat();//父类引用指向子类对象

a 在内存中是 Cat 的大小,但是编译时被视作 Animal 类型。

多态中成员的访问特点

访问成员变量时:优先看等式左侧。如 Animal 和 Cat 中都对 age 赋值了,访问 age 得到的是 Animal 中的 age。因为成员变量不会被重写

访问成员方法时:优先看等式右侧。如 Cat 中重写了 eat 方法,使用 eat 方法就是使用 Cat 中的 eat 方法。

例:Animal 父类,其中含有 eat() 成员方法;Cat Dog Pig 子类,其中都重写了 eat() 成员方法。

public class AnimalOperator(Animal a)
{
    a.eat();
}

//使用
Cat c=new Cat();
Dog d=new Dog();
Pig p=new Pig();
AnimalOperator(c);//多态
AnimalOperator(d);//多态
AnimalOperator(p);//多态

调用的都是子类中重写的方法。

多态提高了程序的拓展性。对于子类重写父类中的方法,我们只需要一个操作类就能访问(无论子类具体是哪一种)。

但是多态无法访问子类中特有的方法。

解决这一弊端的方法就是转型。

Animal a=new Cat();//向上转型,a 不能访问 Cat 类中特有的方法
Cat c=(Cat)a;//向下转型,这样 c 就可以访问 Cat 类中特有的方法了。

使用转型的时候注意不能随便向下转型。如本例中 a 在内存中是 Cat 类,不能转换成 Dog 类。ClassCastException

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灰海宽松

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值