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类的父类。

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


目录
相关文章
|
3天前
|
Java
Java语言中的多态性:深入解析与应用
Java语言中的多态性:深入解析与应用
|
4天前
|
存储 Java 程序员
【Java基础 - 面向对象】
减少耦合: 可以独立地开发、测试、优化、使用、理解和修改 减轻维护的负担: 可以更容易被程序员理解,并且在调试的时候可以不影响其他模块 有效地调节性能: 可以通过剖析确定哪些模块影响了系统的性能 提高软件的可重用性 降低了构建大型系统的风险: 即使整个系统不可用,但是这些独立的模块却有可能是可用的
|
6天前
|
安全 Java 编译器
Java面向对象之——多态
Java面向对象之——多态
|
6天前
|
Java 程序员 编译器
Java面向对象之——继承
Java面向对象之——继承
|
6天前
|
存储 Java 编译器
Java面向对象之——封装
Java面向对象之——封装
|
7天前
|
Java
Java程序设计实验3 | 面向对象(上)(二)
分数的分子和分母用两个整型数表示,类所拥有的方法包括对分数进行加、减、乘、除等运算,以及输出分数的方法,输出分数的格式应该是:分子/分母。
14 0
|
7天前
|
Java
Java程序设计实验3 | 面向对象(上)(一)
实验目的是理解和掌握面向对象编程的基本概念,包括类的声明、实例化和调用,方法及构造方法的定义,方法重载,值传递和地址传递,以及使用this关键字和static关键字。
19 0
|
11天前
|
Java 编译器
【JAVA学习之路 | 基础篇】面相对象特征--多态性
【JAVA学习之路 | 基础篇】面相对象特征--多态性
|
11天前
|
Java
【JAVA学习之路 | 基础篇】面相对象特征--继承性
【JAVA学习之路 | 基础篇】面相对象特征--继承性
|
11天前
|
Java 数据挖掘 Unix
【JAVA学习之路 | 基础篇】面相对象特征--封装性
【JAVA学习之路 | 基础篇】面相对象特征--封装性