目录
定义
多态的条件
1.继承
2.重写
3.父类引用子类对象
4.调用所重写的方法
用代码举个例子让大家认识这四个概念
class A {
public String show(D obj) {
return ("A ");
}
}
//继承
class B extends A{
//重写
public String show(){
return ("B");
}
}
public class Test {
public static void main(String[] args) {
A a1 = new B();//父类引用创建并指向子类对象
A a2 = new A();
B b1 = new B();
//向上转型:子类对象变量赋给父类对象变量完成向上转型
a2=b1;
//调用重写方法
a2.show();
a1.show();
}
}
如代码中的注释:
B 继承 A满足了继承的条件
B 中重写了 A中的show方法 完成了重写
下列代码块分别完成了父类引用子类对象
A a1 = new B( );
a2 = b1;向上转型
最后调用重写方法行成运行时多态;
多态的实现
- 实现同一个接口,不同的实例,相同的动作,干不一样的事。
- 继承同一个父类,重写父类方法,干不同的事。
多态的总结
说了这么多可能大家有点绕昏了
下面说一下自己的理解:
如果遇到可能是多态的情况下,需要判断结果的时候
举个例子:
class Father {
public String num = "父类成员变量";
public void showInFu() {
System.out.println("调用的是父类未重写方法");
}
public void show() {
System.out.println(this.num);
}
}
class Child extends Father
{
public String num = "子类成员变量";
public void show (){
System.out.println(this.num);
}
}
public class Demo2 {
public static void main(String[] args) {
Father f = new Child();
System.out.println(f.num);
f.showInFu();
f.show();
}
}
有继承
有show()函数的重写
出现了父类引用子类对象,则考虑会不会有多态的使用。
先看第一个
f.num
前文说到成员变量不属于多态的使用情况,则num=父类成员变量。
f.showInFu();
此方法没有在子类Child中重写所以不属于多态的使用情况,只是一次简单的父类中方法调用。
f.show();
此方法在子类中重写了,所以属于多态的使用情况。
程序运行结果
父类成员变量
调用的是父类未重写方法
子类成员变量Process finished with exit code 0
一句话
调用的方法是否为重写,是则为多态,否则不能为多态。
其他情况
这是多态的常用情况,涉及到方法参数不同带来的多态,容易产生混淆的情况可以参考这篇文章:
https://www.cnblogs.com/chenssy/p/3372798.html
如果想透彻得弄明白,需要接触到JVM虚拟机,看完这个你就会完全掌握了。
本文深入探讨了Java中的多态性,包括其定义、条件、实现和总结。多态性允许父类引用指向子类对象,并在运行时决定调用哪个重写的方法。实现多态的关键要素包括继承、重写、父类引用子类对象以及调用重写的方法。示例代码展示了如何在实际编程中应用这些概念。通过理解和运用多态,开发者可以写出更加灵活和可扩展的代码。
3332

被折叠的 条评论
为什么被折叠?



