java中的多态

博客以造篮子放水果为例,引出程序中可扩展性的设计思路。通过定义参数为水果的篮子函数,体现参数变化时程序无需修改的优势。还介绍了多态的应用,如子类对象指向父类引用,并阐述了多态应用需满足继承、子类对象指向父类引用、重写三个条件。

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

比如你要做个篮子放水果,你当然不希望造这样的篮子--苹果篮子,橘子篮子,梨篮子,正常人都会想,麻烦啊,我就造个篮子,什么都能放,干嘛造那么多啊?

回归程序:你造个篮子 basket();参数是水果 fruit,这样你调用的时候就可以这样 basket(fruit f);然后往里放苹果啊,梨啊,什么都行,只要是水果类的子类

好处:这样设计你的程序,等你的参数变了的时候,只要还是水果,你就不用去改程序了,这就是可扩展性的体现

fruit f = apple a
这就是一个多态的应用
多态应用的三个条件:
继承 (apple当然继承了fruit)
子类对象指向父类引用(a是apple的一个对象,f是fruit类父类的一个引用)
重写(就是子类重写父类继承来的方法。父类实现了一个方法,他不一定适合子类,因为如果适合你也就不用重新定义一个类了,用父类就行了。这时就需要去重新写一个方法,实现新的功能)

### Java多态的具体表现形式 #### 接口实现多态Java中,除了通过继承来实现多态外,还可以利用接口达到相同的效果。一个类能够实现多个接口,并且不同类可以各自实现相同的接口却表现出各异的行为模式[^2]。 ```java interface Flyable { void fly(); } class Bird implements Flyable { @Override public void fly() { System.out.println("Bird is flying"); } } class Airplane implements Flyable { @Override public void fly() { System.out.println("Airplane is flying at high speed."); } } ``` #### 继承层次中的方法重 当子类覆盖来自其父类的方法时,在运行期间会根据实际对象类型决定执行哪个版本的方法——这便是动态绑定机制发挥作用之处。即使声明类型的引用指向某个特定实例,只要该实例所属的最具体类中有相应方法定义,则优先调用后者[^3]。 ```java public class Animal { public void makeSound(){ System.out.println("Animal sound..."); } } public class Dog extends Animal{ @Override public void makeSound(){ System.out.println("Woof woof!"); } } // 测试代码片段 Animal myPet = new Dog(); // 编译器只知道myPet是一个Animal类型 myPet.makeSound(); // 输出 "Woof woof!" 而不是默认动物叫声 ``` #### 使用 `instanceof` 关键字安全转型 为了防止因强制转换失败而导致程序崩溃(`ClassCastException`)的情况发生,可以在尝试向下型之前先检查目标对象是否确实属于预期类别之一。如果条件成立则继续操作;反之则采取其他措施处理未知情况[^1]。 ```java if (object instanceof String){ String str = (String)object; } else { // Handle non-string objects here. } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值