欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java入门基础 进阶篇————面向对象中的多态

程序员文章站 2022-05-25 20:42:09
...

本文将通过案例、文字详细介绍 面向对象的三大特性 继承 多态 封装
若有细瑕 感谢指正!

今天介绍的是 面向对象三大特性中的————多态

一、什么是多态
多态是同一个行为具有多个不同表现形式或形态的能力
多态就是同一个接口,使用不同的实例而执行不同的操作
图解例子:

宠物
猫 狗
猫吃鱼 狗吃骨头

猫和狗都属于宠物,都有吃食物这个行为,
但是猫吃的是鱼,狗吃的是骨头

二、多态的优点
2.1、消除类型之间的耦合关系
2.2、可替换性
2.3、可扩展性
2.4、接口性
2.5、灵活性
2.6、简化性

三、多态存在的三个必要条件
继承
重写
父类引用指向子类对象

四、关于多态必须要了解的几个概念
向上转型
子类型————》父类型 自动类型转换

向下转型
父类型————》子类型 称为强制类型转换,要加转换符
要求,无论是向上还是向下转型,两者之间必须要有 继承 关系

五、代码案例说明
java入门基础 进阶篇————面向对象中的多态
java入门基础 进阶篇————面向对象中的多态
输出结果:
公司桌子上可以写作
公司电脑上可以编写代码

来桌子上玩棋

来电脑上看有趣的视频

以下是代码:

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();
    }
}

}