面向对象的三大特征之三——多态

王醒燕 王醒燕     2022-08-28     495

关键词:

多态,简单来说就是一种类型表现出多种状态。在Java中多态分为两类。

一、方法多态性——方法的重载和重写。

关于这部分内容已经在前面的内容有过详细的记录,即重复调用的代码块—方法面向对象的特性之二—继承

二、对象的多态性——引用类型转换。

1.向上转型(自动转型)——子类对象自动转换为父类对象。

 1 class Father
 2 {
 3     public void speak()
 4     {
 5         System.out.println("我来自父类Father。");
 6     }
 7 }
 8 class Son extends Father
 9 {
10     public void speak()
11     {
12         System.out.println("我来自子类Son。");
13     }
14 }
15 class Daughter extends Father
16 {
17     public void speak()
18     {
19         System.out.println("我来自子类Daughter。");
20     }
21 }
22 public class T02
23 {
24     public static void main(String[] args)
25     {
26         Father p;
27         Son s = new Son();
28         Daughter d = new Daughter();
29         p=s;//子类对象向上类型转换为Father类型
30         p.speak();
31         p=d;
32         p.speak();
33     }
34 }

输出结果如下:

我来自子类Son。
我来自子类Daughter。

可以看出,第26行声明了一个父类对象p,但没有实例化;第27、28行分别声明子类对象s、d并实例化;经过赋值操作,将子类对象向上转型为Father类型。通过p调用其speak方法,实际输出的是子类对象的speak方法。这里就体现了多态性思想。

需要注意的是:上述父类对象只能调用被子类重写的方法,对于子类自己独有的方法,父类对象是无法访问的。

 1 class Father
 2 {
 3     public void speak()
 4     {
 5         System.out.println("我来自父类Father。");
 6     }
 7 }
 8 class Son extends Father
 9 {
10     public void speak()
11     {
12         System.out.println("我来自子类Son。");
13     }
14     public void print()
15     {
16         System.out.println("我是Tom。");
17     }
18 }
19 public class T02
20 {
21     public static void main(String[] args)
22     {
23         Father p;
24         Son s = new Son();
25         p=s;//子类对象向上类型转换为Father类型
26         p.speak();
27         p.print();//错误的,无法访问
28     }
29 }

那么如果非要调用子类的print()方法,那么就要用到下面的向下强制转型,将父类对象赋值给子类对象。

2.向下转型(强制转型)——父类对象强制转换为子类对象。

 1 class Father
 2 {
 3     public void speak()
 4     {
 5         System.out.println("我来自父类Father。");
 6     }
 7 }
 8 class Son extends Father
 9 {
10     public void speak()
11     {
12         System.out.println("我来自子类Son。");
13     }
14     public void print()
15     {
16         System.out.println("我是Tom。");
17     }
18 }
19 public class T02
20 {
21     public static void main(String[] args)
22     {
23         Father p = new Son();
24         p.speak();//自动类型转换
25         ((Son) p).print();//强制类型转换
26     }
27 }

如果同时存在多个子类,就需要使用instanceof关键字来检测转换的安全性,即在每次转换之前都加上一个if判断语句:

if(p instanceof Son)
{
     Son s1 = (Son)p();
}else
{
     System.out.println("无法转换!");
}

3.隐藏——static无法被重写的特性。

当我们不想调用子类中重写的方法,而希望调用父类中原来的方法时,就可以使用隐藏来实现。

 1 class Father
 2 {
 3     public static void speak()
 4     {
 5         System.out.println("我来自父类Father。");
 6     }
 7 }
 8 class Son extends Father
 9 {
10     public static void speak()
11     {
12         System.out.println("我来自子类Son。");
13     }
14 }
15 public class T02
16 {
17 
18     public static void main(String[] args)
19     {
20         Father p = new Son();
21         p.speak();//调用的是父类中的speak()方法
22     }
23 }

输出结果:我来自父类Father。

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

Java面向对象编程三大特征-多态本文关键字:Java、面向对象、三大特征、多态多态是面向对象编程的三大特征之一,是面向对象思想的终极体现之一。在理解多态之前需要先掌握继承、重写、父类引用指向子类对象的相关概念,... 查看详情

java面向对象三大特征之继承和多态(代码片段)

...转型多态代码案例总结前言  上一篇博客我们介绍了Java面向对象思想以及三大特征之一的封装。本文将介绍面向对象三大特征的剩下两个特征——继承和多态,我个人认为继承和多态是三个特征中比较重要且理解起来稍有... 查看详情

面向对象三大特征--多态

多态:一个对象具备多种形态。说白点就是:父类的引用类型变量指向子类的对象或者接口的引用类型变量指向了接口实现类的对象。多态的前提:必须存在集成或实现的关系。多态注意的细节:   1、多态情况下,... 查看详情

面向对象三大特征之多态(代码片段)

面向对象的三大特征:封装、继承、多态。今天重点来看一下“多态”。封装  指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。将属性或方法进行封装,防止外部程序随机访问,加强代码的安全性。继承&n... 查看详情

面向对象三大特征之继承,多态

//面向对象三大特性//继承//概念:子类可以继承父类的一切//方法重写:在子类里面对父类的方法进行重写//特点:单继承:一个子类只能有一个父类,一个父类可以派生出多个子类//override:重写//overload:重载,编程多态//parent::值... 查看详情

面向对象三大特征---封装继承多态

面向对象的三个基本特征是:封装、继承、多态。                             &nbs 查看详情

python入门-6面向对象编程:07面向对象三大特征(封装继承多态)-继承(代码片段)

一:面向对象三大特征介绍  Python是面向对象的语言,也支持面向对象编程的三大特性:继承、封装(隐藏)、多态。  封装(隐藏)    隐藏对象的属性和实现细节,只对外提供必要的方法。相当于将“细节封装... 查看详情

java入门二十二面向对象三大特征之多态

面向对象的三大特征:继承、封装、多态,今天学的是多态,看完后有什么不懂的地方可以问小编,也可以评论里问,我们一起解决。多态(polymorphism)在编程语言和类型论中,多态指为不同数据类型的实体提供统一的接口。多... 查看详情

golang如何体现面向对象三大特征之多态?(代码片段)

...多态数组基本介绍变量(实例)具有多种形态。面向对象的三大特征,在Go语言,多态特征是通过接口实现的。可以按照统一的接口来调用不同的实现。这时接口变量就呈现不同的形态。快速入门在前面的Usb接口... 查看详情

面向对象三大特征——封装多态接口

  一、封装  1.封装的概念:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作与访问。混那个通过规定方法访问数据  2.封装的好处:    1).只能通过规定... 查看详情

面向对象的三大特征:继承封装多态(代码片段)

面向对象:面向对象专注于由谁来解决这个过程,而调用者无需关注对象实现的细节编程特点:出现了一个个的类,从类中拿到对象,通过对象直接解决问题类:具有一系列相同属性(特征)和方法(行为)的个体的集合称为类   ... 查看详情

javase基础知识—面向对象(5.4面向对象三大特征:封装继承多态)

面向对象编程具有三大特征:封装继承多态一、封装1、好处狭义的封装:也就是属性的封装,避免了任意赋值的危险,提高了数据的安全性!  ①隐藏一个类中不需要对外提供的实现细节  ②使用者只能通过实现定制好的... 查看详情

谈面向对象的三大特征

 引:什么是面向对象? 面向对象,专注于由谁(哪个对象)来解决这个问题,而调用者无需关注对象实现的细节。 编程特点:出现了一个个的类,从类中拿到对象,通过对象直接解决问题。 应用:Java PHP c++ c#... 查看详情

面向对象三大特征(代码片段)

面向对象三大特征:封装、继承、多态继承是多态的前提,如果没有继承,就没有多态。封装性在Java当中的体现:方法就是一种封装关键字private也是一种封装(一旦使用了private进行修饰,那么本类当中仍然可以随意访问。但是... 查看详情

面向对象有三大特征

封装、继承、多态封装定义:隐藏类的内部信息,不允许外部程序直接访问,而是通过方法进行操作封装操作步骤将属性设置为私有的private,只能在本类中使用编写对应属性的赋值setXxx和取值getXxx方法第三步:根据情况编写判断... 查看详情

java面向对象的三大特征?

面向对象三大特性继承:一般类只能单继承,内部类实现多继承,接口可以多继承封装:访问权限控制public>protected>包>private内部类也是一种封装多态:编译时多态,体现在向上转型和向下转型,通过引用类型判断调用哪... 查看详情

面向对象的三大特征

Java面向对象的三大特征:封装、继承、多态封装和继承几乎都是为多态而准备的一、 封装首先,属性能够描述事物的特征,方法能够描述事物的动作。封装就是把同一类事物的共性(包括属性和方法)归到同一类中,方便... 查看详情

java面向对象的三大特征

Java面向对象的三大特征:封装、继承、多态封装和继承几乎都是为多态而准备的一、     封装首先,属性能够描述事物的特征,方法能够描述事物的动作。封装就是把同一类事物的共性(包括属性和方法)归... 查看详情