Java面向对象编程三大特征-多态

简介: Java面向对象编程三大特征-多态

🍁什么是多态

  • 多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。
  • 多态指的是同一个父类,或同一个接口,发出了一个相同的指令(调用了同一个方法),由于具体执行的实例(子类对象或实现类对象)不同,而有不同的表现形态(执行效果)。
  • 对于抽象类的抽象方法,由于子类必须进行重写,所以由子类去执行父类的抽象方法必然是多态的体现,对于其他的情况则未必构成多态,因此总结了以下三个必要条件。

🍁多态的必要条件

  • 存在子父类继承关系
  • 子类重写父类的方法
  • 父类引用指向子类对象

🍁多态的使用

格式:父类 变量名 = new 子类();

案例分析:

public class Test {
    public void test(Person person) {
        person.study();
        person.sleep();
    }
    public static void main(String[] args) {
        Test t= new Test ();
        t.test(new Student());
        System.out.println("---------");
        t.test(new Teacher());
    }

}

class Person{

    public void study(){
        System.out.println("study...");
    }
    public void sleep(){
        System.out.println("sleep...");
    }
}

class Student extends Person{

    public void study(){
        System.out.println("student study...");
    }

    public void sleep(){
        System.out.println("student sleep...");
    }
}


class Teacher extends Person{
    public void study(){
        System.out.println("teacher study...");
    }

    public void sleep(){
        System.out.println("teacher sleep...");
    }
}

🍁多态的实现方式

  • 方式一:重写
  • 方式二:接口
  • 方式三:抽象类和抽象方法

🍁多态转型

  • 向上转型

    • 当子类对象赋值给一个父类引用时,即向上转型(多态本身就是向上转型的过程)
    • 格式:父类类型 变量名 = new 子类类型();
  • 向下转型

    • 通过强制类型转换格式,将父类引用转为子类格式
    • 格式:子类类型 变量名 = (子类类型)父类类型的变量;

案例分析:

public class Test {
    public static void main(String[] args) {
        Person person = new Student();
        Student student = new Student(); //向上转型
        Student student1 = (Student)person; //向下转型
        student.sleep();
        student1.sleep();
    }
}

class Person{
    public void sleep() {
        System.out.println("sleep...");
    }
}

class Student extends Person{
    public void sleep() {
        System.out.println("student sleep...");
    }
}

🍁多态的优点

  • 使用多态有多种好处,特别是一个抽象类有多个子类,或一个接口存在多个抽象类时,在进行参数传递时就会非常的灵活,在方法中只需要定义一个父类型作为声明,传入的参数可以是父类型本身,也可以是对应的任意子类型对象。
  • 多态的优点:

    • 降低耦合:只需要与父类型产生关联即可
    • 可维护性: 只需要添加或修改某一子类型即可,不会影响其他类
    • 可扩展性:使用子类,可以对已有功能进行快速扩展
    • 灵活性
    • 接口性
  • 缺点:

    • 无法使用子类特有的功能(如要使用就要使用向下转型强制类型转换)
相关文章
|
2月前
|
Java 开发者
Java 面向对象编程
总之,Java 的面向对象编程为开发者提供了一种有效的编程范式,帮助他们构建出高质量、可维护的软件系统。理解和掌握面向对象的概念和原则是成为优秀 Java 开发者的重要基础。
204 63
|
2月前
|
JavaScript 前端开发 Java
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。如果你从我的文章中受益,欢迎关注我,我将持续更新更多优质内容。你的支持是我前进的动力!🎉🎉🎉
29 0
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
|
3月前
|
存储 Java 测试技术
Java零基础-多态详解
【10月更文挑战第10天】Java零基础教学篇,手把手实践教学!
49 4
|
3月前
|
Java 编译器 程序员
Java多态背后的秘密:动态绑定如何工作?
本文介绍了Java中多态的实现原理,通过动态绑定和虚拟方法表,使得父类引用可以调用子类的方法,增强了代码的灵活性和可维护性。文中通过具体示例详细解析了多态的工作机制。
85 4
|
3月前
|
Java
java继承和多态详解
java继承和多态详解
58 5
|
3月前
|
存储 Java 测试技术
Java零基础-多态详解
【10月更文挑战第1天】Java零基础教学篇,手把手实践教学!
32 1
|
3月前
|
安全 Java 编译器
【一步一步了解Java系列】:重磅多态
【一步一步了解Java系列】:重磅多态
33 3
|
3月前
|
SQL 安全 Java
JAVA代码审计SAST工具使用与漏洞特征
JAVA代码审计SAST工具使用与漏洞特征
129 2
|
6月前
|
搜索推荐 Java 编译器
【Java探索之旅】多态:重写、动静态绑定
【Java探索之旅】多态:重写、动静态绑定
41 0
|
Java 程序员 C++
java面向对象编程_包_继承_多态_重载和重写_抽象类_接口_this和super(3)
java面向对象编程_包_继承_多态_重载和重写_抽象类_接口_this和super(3)
217 0
java面向对象编程_包_继承_多态_重载和重写_抽象类_接口_this和super(3)