Java多态

什么是多态

多态:多态是一种运行期的状态,表示同一操作(new 猫())作用于不同对象(猫 m动物 d),可以有不同的解释(//猫是猫//猫是动物),产生不同的执行结果

举例:

猫 m=new 猫()//猫是猫
动物 d=new 猫()//猫是动物

说明:

有些文档说运行时多态和编译时多态

  • 编译时多态主要指方法重载

  • 运行时多态指沉痼中定义的对象引用所指向的具体类型在运行期确定

这种说法是错误的,继承中根本不存在重载,重载的定义是在同一个类中

多态的必要条件

  1. 要有继承关系

  2. 要有方法重写(其实可以不写,但是不写无法体现多态,无意义)

  3. 要有父类引用指向子类对象

public class Parent{

  public void call(){
    sout("im Parent");
  }
}
public class Son extends Parent{// 1.有类继承或者接口实现
  @Override
  public void call(){// 2.子类要重写父类的方法
    sout("im Son");
  }
}
public class Daughter extends Parent{// 1.有类继承或者接口实现
  @Override
  public void call(){// 2.子类要重写父类的方法
    sout("im Daughter");
  }
}
public class Test{
  public static void main(String[] args){
    Parent p = new Son(); //3.父类的引用指向子类的对象
    Parent p1 = new Daughter(); //3.父类的引用指向子类的对象
  }
}

多态中的成员访问特点

成员变量:编译父亲的(看父类是否有该调用方法,使用父类的,输出父类的)编译看左边,运行看左边

构造方法:创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化,再对子类进行初始化

成员方法:编译父类的,使用子类的(因为子类重写了该方法):编译看左边,运行看右边

静态方法:编译看左边,运行看左边

(静态和类相关,算不上重写,所以,访问的还是左边的)

多态的优缺点

优点:

  • 提高了代码的维护性(继承就可以保证)

  • 提高了代码的扩展性

  • 多态可以解决在某种条件下不知道具体事物的属性,只知道行为的情况

  • 可以使用多态进行类扩展。

缺点:

  • 不能使用子类的特有功能

    解决方法:把父类的引用赋值给子类(向下转型)

    Fu f=new Zi()
    Zi z=(Zi)f//必须加强制转换,否则就不兼容
    
  • 对象间的转型问题:
    向上转型:
    Fu f=new Zi()
    向下转型:
    Zi z=(Zi)f;//必须满足f可以转换为Zi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Carl·杰尼龟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值