美文网首页基础知识
java中的多态及多态中的引用类型转换

java中的多态及多态中的引用类型转换

作者: X兄 | 来源:发表于2019-01-23 16:37 被阅读32次

java中的多态

多态,是面向对象的程序设计语言最核心的特征。

多态就是对象的多种形态,分为两个方面:

   1.引用的多态 :父类的引用可以指向本类的对象   Animal obj1 = new Animal ();

                            父类的引用可以指向子类的对象   Animal obj2 = new Dog();

    但是一定要注意,不能子类的引用指向父类的对象,否则会出错。

     Dog obj3 = new Animal ();      //这是错误的,报错

   2.方法的多态: 创建本类对象时,调用的方法为本类方法

                            创建子类对象时,调用的方法为子类重写的方法或者继承的方法

如在父类Animal中创建一个eat()方法:

创建一个eat()方法

然后在子类Dog中重写这个eat()方法:

重写eat()方法

这时,我们用obj1.eat()则是调用了父类中的方法:

调用了父类中的方法

然后,我们再用obj2.eat()则是调用了子类中的方法:

调用了子类中的方法

以上,我们便称之为方法的多态,但是还有一种特殊的多态,如我们再创建一个子类Cat

子类Cat继承父类Animal

我们再调用eat()方法,则是子类继承父类的方法:

子类继承父类的方法

另外,如果我们在子类中自定义一个watchDoor()方法,这个方法不是从父类继承来的:

自定义一个watchDoor()方法

这时候我们调用这个watchDoor()是不行的.

不能调用

多态中的引用类型转换:

首先我们要知道什么是引用类型转换:

引用类型转换

可以看出由大类型转换为小类型时是有风险的,那么如何避免这种风险的,我们可以用instanceof运算符进行转换,Java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。

用法:

result = object(任意对象表达式)  instanceof  class(任意已定义的对象类)

说明:

如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。

当父类的引用指向子类对象时或者子类的引用指向该对象时,是没有问题的.而如果将父类的引用转换为子类的引用,那么这是有风险的.编译器是不允许这样做的.

而如果我们利用强制类型转换

Dog dog = new Dog();

Animal animal = dog;  //自动类型提升,向上类型转换

Dog dog = (Dog)animal; //向下类型转换,强制转换

Cat cat = (Cat)animal;  //编译时Cat类型,执行时是Dog类型

虽然此时,没有报错,但是当我们运行时,却出现了问题:

报错

      此时就可以利用instanceof运算符避免类型转换的安全性问题:

相关文章

  • java中的多态及多态中的引用类型转换

    java中的多态 多态,是面向对象的程序设计语言最核心的特征。 多态就是对象的多种形态,分为两个方面: 1.引用...

  • Java面向对象三大特性之一 多态

    了解多态的及使用 认识多态多态是Java面向对象中的一个重要特性。在程序中,它意味着一个特定类型的变量可以引用不用...

  • 多态中的引用类型转换

    .instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题。 A instanceof B,A是...

  • 2.4 多态(面向对象)

    1、Java中的多态 对象的多种形态 引用多态父类的引用可以指向本类的对象父类的引用可以指向子类的对象 方法多态创...

  • 多态

    多态:父类类型的引用指向了子类类型的对象. 多态的弊端:只能调用父类中的功能,不能调用子类特有的功能. 多态的好处...

  • Java多态

    Java多态 编译时类型和运行时类型 理解编译时类型和运行时类型是理解多态的关键 上最直白的定义: Java的引用...

  • java049多态的转型和优缺点及包

    1.多态中的向上转型和向下转型 引用类型之间的转换: 向上转型:由小到大(子类转换成父类) 向...

  • java面试题汇总(二)

    11、Java中实现多态的机制是什么? 静态的多态:同一个类中,方法名相同,参数列表不同 动态的多态:引用变量的类...

  • java中实现多态的原理是什么

    java中实现多态的原理是什么 什么是多态? 多态就是指一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方...

  • 深入理解 Python 类和对象(1) - 鸭子类型和多态

    什么是鸭子类型? Java 中实现多态,需要继承父类,并覆盖父类中的方法。 Python 中实现多态,不需要继承任...

网友评论

    本文标题:java中的多态及多态中的引用类型转换

    本文链接:https://www.haomeiwen.com/subject/gpxsjqtx.html