面向对象的三大特性之一:多态

本文详细介绍了面向对象的多态性概念,包括静态和动态多态的定义,以及它们在Java中的实现。通过代码示例展示了如何在继承和重写的基础上实现多态,解释了向上转型的过程,并通过复杂示例分析了多态行为的运行结果。
摘要由CSDN通过智能技术生成

面向对象的三大特性:继承,封装,多态

多态

1.多态定义

一种数据类型,多种形态。指不同继承关系的对象,调用同一函数,产生不同结果的行为。

2.多态的必要条件

1.继承:有父子类关系

2.重写:相同函数名,相同参数列表,相同返回值

3.向上转型:父类数据类型 name = new 子类数据类型 ();

名字相同的成员变量的值与父类数据类型里的一致,名字,参数列表,返回值一样的方法与子类里的一样

3.多态分为静态多态和动态多态。

静态多态

主要指方法的重载,根据参数列表和返回值不同区分不同的函数,编译之后会变成两个不同的函数。

动态多态

运行时,先去子类里找同名方法,找不到了再去父类中找,一层一层往上升。

代码实例

class  A extends B{
 String z = "A";
​
 public void ma(){
     System.out.println(z+".....ma......");
 }
​
}
class B extends C{
 String z = "B";
 public void mb(){
     System.out.println(z+"......mb.....");
 }
 @Override
 public void mc() {
     System.out.println("B......mc.....");
 }
}
class C {
 String z = "C";
 public void mc(){
     System.out.println(z+"......mc.....");
 }
​
​
}
public class Test {
​
 public static void main(String[] args) {
     A a = new A();
     a.ma();
     //运行结果为: A.....ma......
     a.mb();
     //运行结果为: B......mb.....
     a.mc();
     //运行结果为: B......mc.....               在B里找到了mc方法
     System.out.println(a.z);
     //运行结果为:  A
     C c = new B();
     c.mc();
     //运行结果为:  B......mc.....            在子类里找到了mc方法
     System.out.println(c.z);
     //运行结果为:  C          与父类里的一样
​
​
​
​
 }
​
}

较难实例

public class A {
 public String show(D obj) {
     return ("A and D");
 }
​
 public String show(A obj) {
     return ("A and A");
 } 
​
}
​
public class B extends A{
 public String show(B obj){
     return ("B and B");
 }
​
 public String show(A obj){
     return ("B and A");
 } 
}
​
public class C extends B{
​
}
​
public class D extends B{
​
}
​
public class Test {
 public static void main(String[] args) {
     A a1 = new A();
     A a2 = new B();
     B b = new B();
     C c = new C();
     D d = new D();
​
     System.out.println("1--" + a1.show(b));
     System.out.println("2--" + a1.show(c));
     System.out.println("3--" + a1.show(d));
     System.out.println("4--" + a2.show(b));
     System.out.println("5--" + a2.show(c));
     System.out.println("6--" + a2.show(d));
     System.out.println("7--" + b.show(b));
     System.out.println("8--" + b.show(c));
     System.out.println("9--" + b.show(d));      
 }
}

运行结果

1--A and A
2--A and A
3--A and D
4--B and A
5--B and A
6--A and D
7--B and B
8--B and B
9--A and D
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值