Java面向对象 特征三(多态性)详解

简介: Java面向对象 特征三(多态性)详解

1.理解多态性:可以理解为一种事物的多种形态。

2.何为多态性:

对象的多态性,父类的引用指向子类的对象(或子类的对象赋值给父类的引用)

3.多态性的使用:虚拟方法的调用

有了对象的多态性以后,我们在编译时期,只能调用父类中声明的方法,但在运行的时候,我们实际执行的是子类重写父类的方法。

总结:编译,看左边,执行,看右边。

4.多态性的使用前提:1.类的继承性 2.方法的重写

5.对象的多态性:只适用于方法,不适用于属性(编译和运行都看左边)。

注意:多态性:是运行时行为。 只有在运行之后才知道,调用的是哪个子类中重写的方法。

多态的向上转型本质: 父类的引用指向子类的对象

多态的向上转型语法: 父类类型 引用名 = new 子类类型();

多态的向下转型本质:

扩展:

instanceof关键字的使用

instanceof 比较操作符,用于判断对象的运行类型是否为XX类型或者XX类型的子类型。

具体代码如下:

public class PolyDetail03 {
    public static void main(String[] args) {
        BB bb = new BB();
        System.out.println(bb instanceof BB); //true
        System.out.println(bb instanceof AA);//true 判断bb成员变量 是类型AA吗 或者是类型AA的子类吗
        //aa 编译类型AA  运行类型BB 判断看的是运行类型
        AA aa = new BB();
        System.out.println(aa instanceof AA); //true
        System.out.println(aa instanceof BB); //true
        Object object = new Object();
        System.out.println(object instanceof AA); //false
        String str = "hello";
        System.out.println(str instanceof Object); //true
    }
}
class AA {
}
class BB extends AA {
}

a instanceof A :检验对象a是否是类A的实例,如果是返回true,否则返回false。

1.要求 a 所属的类与类A必须是子父类的关系,否则编译错误

2.如果a属于类A的子类B, a instanceof A值也为true

使用情景:为了避免在向下转型时出现classCastException异常,使用instanceof进行判断,一旦返回true,就向下转型,否则就不进行向下转型。

如果 a instanceof A 返回true, a instanceof B 返回true
那么B类就是A类的父类。

这句话不理解可以看下面的图:


目录
相关文章
|
18天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
12 2
|
27天前
|
设计模式 算法 Java
Java中的多态性:深入理解与应用
【10月更文挑战第16天】 在Java编程的广阔天地中,多态性作为一种强大的面向对象特性,扮演着至关重要的角色。它允许我们以统一的方式处理不同类型的对象,极大地提高了程序的灵活性和可扩展性。本文将深入浅出地探讨Java中多态性的概念、实现机制以及在实际开发中的应用,帮助读者更好地理解和运用这一特性。
|
2月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
1月前
|
SQL 安全 Java
JAVA代码审计SAST工具使用与漏洞特征
JAVA代码审计SAST工具使用与漏洞特征
41 2
|
2月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
35 4
|
2月前
|
SQL 安全 Java
JAVA代码审计SAST工具使用与漏洞特征
JAVA代码审计SAST工具使用与漏洞特征
62 1
|
2月前
|
Java
接口和抽象类【Java面向对象知识回顾②】
本文讨论了Java中抽象类和接口的概念与区别。抽象类是不能被实例化的类,可以包含抽象和非抽象方法,常用作其他类的基类。接口是一种纯抽象类型,只包含抽象方法和常量,不能被实例化,且实现接口的类必须实现接口中定义的所有方法。文章还比较了抽象类和接口在实现方式、方法类型、成员变量、构造方法和访问修饰符等方面的不同,并探讨了它们的使用场景。
接口和抽象类【Java面向对象知识回顾②】
|
1月前
|
存储 Java 程序员
Java基础-面向对象
Java基础-面向对象
16 0
|
2月前
|
安全 Java Go
面向对象程序设计语言:Java
Java语言语法和C语言和C++语言很接近,很容易学习和使用,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的特性,Java语言不使用指针,而是引用,并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧
56 2
|
2月前
|
Java 开发者
Java 面向对象
Java 是一种面向对象的编程语言,通过对象与类的概念组织代码和数据。面向对象编程的核心包括类、对象、继承、多态、封装和抽象。类是对象的蓝图,定义了属性和行为;对象则是类的实例。继承允许子类继承父类的属性和方法,增强代码复用性;多态则支持通过相同接口调用不同类型对象的行为,包括方法重载和重写。封装通过公共方法隐藏对象细节,提高安全性;抽象则对对象特征进行提炼,通过抽象类和接口实现。理解这些概念有助于设计高效、可维护的 Java 应用程序。