Java中关于多态的理解

Java中多态的理解
JAVA中的多态可以简单的理解为一种事物的多种形态,当然多态是在继承的基础上有重写才存在。(因为这篇文章是转载过来的,大部分地方持支持的态度,但也有一些地方存在个人态度,比如这里,我认为接口实现也算存在多态)。

如何理解一种事物的多种形态?
举个例子,拿人类、男人、女人来说。男人、女人、都分别继承了人类!
人类有鼻子、眼睛、嘴巴、男人或者女人都有。
人类会吃饭,会睡觉,会散步,男人或者女人都会。
但是在男人和女人都有自己独特的一些技能。比如说男人大多数力气很大。女人大多数都很漂亮。
以上是个前提。我们用代码去实现一下。
下面是定义的People类
在这里插入图片描述

下面是定义的男人类:并重写了People的eat和walk的方法,男人还有自己特有的方法为power
在这里插入图片描述

下面定义的是女人类:女人类也重写了People的eat和walk的方法,并且女人有自己特有的方法beautiful
在这里插入图片描述

当我们在Main方法中去声明People类:people对象可以调用People类中的已经声明的方法和属性,这个不需要解释。如下图所示:
在这里插入图片描述

我们可以用创建一个父类的引用,用一个子类的对象去赋值。
创建父类的引用说白了就是构造一个父类的对象,在我们当前的逻辑中就是创建People的对象;
用一个子类的对象去赋值,就是可以用子类的对象去代替之前的new People();
在这里插入图片描述

因为Man类和Woman类都是继承People类的,也就是说,当用到People的时候,我可以直接用People的子类进行替代。同理声明Woman也是可以的:
在这里插入图片描述

这样的声明方式有一种特点,就是创建的对象p1能调用多少方法,看的是左边的类,在People p1 = new Woman();中,p1能调用多少属性和方法看的是左侧的People类。如下图所示:
在这里插入图片描述

可以调用出父类的一些属性和方法,当我们调用eat()方法时候,运行:
在这里插入图片描述

在这里插入图片描述

我们发现运行的是Woman中的eat方法
我们改变一下Woman中的eat方法名字,从eat改为eatsss
在这里插入图片描述

重新执行p1.eat()
运行的就是父类中的方法:
在这里插入图片描述

给People类中增加一个属性 int ID 并且赋值为1;
在这里插入图片描述

给 Woman类中也增加一个属性 int ID =2;
在这里插入图片描述

在main函数中调用p1.ID并打印
在这里插入图片描述

结果为1
在这里插入图片描述

也就是说 这样的情况下:People p1 = new Woman();
**调用的属性看的是左边的属性,方法需要看一下是否是重写的,因为你只能调用出People中的属性和方法,如果是在右侧的类中有重写的同名方法,调用的就是它,如果没有重写的方法,调用的就是左侧的类中的方法

还是借用上面的三个类来描述:
在main方法所在的类中,加入一个一个方法:
在这里插入图片描述

是一个People类,我们上面说了,任何父类出现的地方,我们都可以用子类来替代。
当我们调用下该方法:
在这里插入图片描述

这就是多态中的使用,传入的对象调用那个具体的方法,还是要看是否有重写,有重写走子类重写,没有重写走父类的方法。

注:本文章为转载文章,表示博主同意文章出处的博主的观点。希望各位大佬不吝赐告,改善文章不妥之处,以免误人子弟,谢谢!

转载于:https://blog.csdn.net/zhangguan96/article/details/123721254

猜你喜欢

转载自blog.csdn.net/qq_41774102/article/details/127107315