文章目录
- 1. 多态的概述
- 2 .多态中的成员访问特点
- 3. 多态的好处和弊端
- 4. 多态中的转型
- 5. 多态中转型存在的风险和解决方案 (应用)
- 6. 多态的实用价值
1. 多态的概述
- 什么是多态
- 同一个对象,在不同时刻表现出来的不同形态
- 多态的前提
- 要有继承或实现关系
- 要有方法的重写
- 要有父类引用指向子类对象
- 代码演示
class Animal {
public void eat(){
System.out.println("动物吃饭");
}
}
class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
public class Test1Polymorphic {
/*
多态的前提:
1. 要有(继承 \ 实现)关系
2. 要有方法重写
3. 要有父类引用, 指向子类对象
*/
public static void main(String[] args) {
// 当前事物, 是一只猫
Cat c = new Cat();
// 当前事物, 是一只动物
Animal a = new Cat();
a.eat();
}
}
2 .多态中的成员访问特点
- 成员访问特点
- 成员变量
- 编译看父类,运行看父类
- 成员变量
- 成员方法
- 编译看父类,运行看子类
- 代码演示
class Fu {
int num = 10;
public void method(){
System.out.println("Fu.. method");
}
}
class Zi extends Fu {
int num = 20;
public void method(){
System.out.println("Zi.. method");
}
}
public class Test2Polymorpic {
/*
多态的成员访问特点:
成员变量: 编译看左边 (父类), 运行看左边 (父类)
成员方法: 编译看左边 (父类), 运行看右边 (子类)
*/
public static void main(String[] args) {
Fu f = new Zi();
System.out.println(f.num);
f.method();
}
}
3. 多态的好处和弊端
- 好处
- 提高程序的扩展性。定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型
参与操作
- 提高程序的扩展性。定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型
- 弊端
- 不能使用子类的特有成员
4. 多态中的转型
- 向上转型
- 父类引用指向子类对象就是向上转型
- 向下转型
- 格式:子类型 对象名 = (子类型)父类引用;
- 代码演示
Zi z = (Zi) f;
5. 多态中转型存在的风险和解决方案 (应用)
-
风险
- 如果被转的引用类型变量,对应的实际类型和目标类型不是同一种类型,那么在转换的时候就会出现
ClassCastException
- 如果被转的引用类型变量,对应的实际类型和目标类型不是同一种类型,那么在转换的时候就会出现
-
解决方案
- 关键字
- instanceof
- 使用格式
- 变量名 instanceof 类型
通俗的理解:判断关键字左边的变量,是否是右边的类型,返回boolean类型结果
- 变量名 instanceof 类型
- 关键字
if(a instanceof Dog){
Dog dog = (Dog) a;
dog.watchHome();
}
6. 多态的实用价值
多态在面向对象编程中有着广泛的使用价值,主要表现在以下方面:
可替换性:多态允许子类对象替换父类对象,并且可以调用覆盖了父类方法的子类方法。这样可以极大地增加代码的可复用性和可扩展性。
灵活性:通过多态,一个超类对象可以调用子类对象的方法,从而使代码更加灵活和易于扩展。程序员只需要引用超类对象而不是具体的子类对象,就能够避免对代码进行大量修改的情况。
统一性:通过多态性,所有继承自父类的子类都能以相同的方式处理,从而增强了代码的可维护性和可读性。例如,在Java的集合框架中,所有实现了List接口的类都能够使用相同的方法对列表进行操作。
可扩展性:通过多态,我们可以很容易地扩展应用程序的功能。例如,我们可以创建新的子类,并覆盖它们的父类方法,从而为应用程序添加新的功能,而无需改变现有的代码。
多态是面向对象编程中非常重要的概念,它可以使软件系统更加灵活和可扩展,同时还可以提高代码的可读性、可维护性和可复用性,从而降低软件开发的成本。