java入门基础 进阶篇————面向对象中的多态
本文将通过案例、文字详细介绍 面向对象的三大特性 继承 多态 封装
若有细瑕 感谢指正!
今天介绍的是 面向对象三大特性中的————多态
一、什么是多态
多态是同一个行为具有多个不同表现形式或形态的能力
多态就是同一个接口,使用不同的实例而执行不同的操作
图解例子:
宠物
猫 狗
猫吃鱼 狗吃骨头
猫和狗都属于宠物,都有吃食物这个行为,
但是猫吃的是鱼,狗吃的是骨头
二、多态的优点
2.1、消除类型之间的耦合关系
2.2、可替换性
2.3、可扩展性
2.4、接口性
2.5、灵活性
2.6、简化性
三、多态存在的三个必要条件
继承
重写
父类引用指向子类对象
四、关于多态必须要了解的几个概念
向上转型
子类型————》父类型 自动类型转换
向下转型
父类型————》子类型 称为强制类型转换,要加转换符
要求,无论是向上还是向下转型,两者之间必须要有 继承 关系
五、代码案例说明
输出结果:
公司桌子上可以写作
公司电脑上可以编写代码
来桌子上玩棋
来电脑上看有趣的视频
以下是代码:
class goods {
public void company() {
System.out.println(“公司里有很多物品——父类方法”);
}
}
class desk extends goods { // 继承了父类
public void company() {
System.out.println(“公司桌子上可以写作”);
} // 对继承的父类属性 进行自己的说明
public void chess() { // 建立自己的新属性
System.out.println(“来桌子上玩棋”);
}
}
class computer extends goods {// 继承了父类
public void company() {
System.out.println(“公司电脑上可以编写代码”);
} // 对继承的父类属性 进行自己的说明
public void look() { // 建立自己的新属性
System.out.println(“在电脑上看有趣的视频”);
}
}
public class Duotai1 {
public static void main(String[] args) { // 建立主方法
goods a1 = new desk();
a1.company();
goods b1 = new computer();
b1.company();
// 向上转型 子类型转换成父类型
System.out.println("\t");
// 需求调用 look 中的方法? 调用子类中自己的方法?怎么操作?
// 但是 look没有继承关系
// 当调用的方法是子类型特有的
// 这时就需要用到 建立继承关系 需要强制类型转换符 向下转型 父——》子
desk c = (desk)a1; //这里使用的就是强制类型转换符
c.chess();
System.out.println("\t");
goods a2 = new computer();
// goods a2 = new desk();
// a2.look();//没有继承关系所以无法运行
// 使用实例运算符 instandceof
// 引用 instandceof 数据类型名
// 执行结果是布尔类型 结果可能是true / false
// true 代表应用指向的对象是一个goods类型
// false 代表应用指向的对象不是goods类型
// 所以我们在这里加一个if判断语句
if (a2 instanceof desk) { // 这里的a2引用的是父类
desk a3 = (desk) a2; // 所以跳过desk
a3.chess();
} else if (a2 instanceof computer) { // 指向为computer 所以输出look
computer b2 = (computer) a2;
b2.look();
}
}
}
上一篇: Java面向对象 多态的好处
推荐阅读