多态性 继承 向上转型

本文探讨了多态性的概念,即同一事件在不同对象上产生不同效果,并通过例子展示了不同类如何实现多态。多态的实现依赖于继承和方法重写。在Java中,父类引用可以指向子类对象,但只能访问父类中的方法和属性,无法直接调用子类特有的方法。文章还强调了重写的重要性,指出子类可以重写父类的方法,但在父类引用调用时会调用子类的重写方法。
摘要由CSDN通过智能技术生成

多态:
同一个事件发生在不同的对象上会产生不同的效果。
不同实列对象使用通过同一种方法而产生的不同的效果。
例如:

  • 不同动物奔跑run方式不同
  • 不同人种说话方式不同
  • 不同的的车刹车的方式不同

多态存在条件:

  • 继承
  • 重写
  • 父类的引用指向子类的对象
public class Animal{

    public void chat(){
        System.out.println("Animal-----chating.....");
        Say();
    }
    public void say(){
        System.out.println("Animal------saying...");
    }
}
 
public class Lion extends Animal{
    /**
     * @desc 子类重载父类方法
     *        父类中不存在该方法,向上转型后,父类是不能引用该方法的
     * @return void
     **/
    public void chat(String s){
        System.out.println("JNC 的 Fun1...");
        say();
    }
   
    /**
     * 子类重写父类方法
     * 指向子类的父类引用调用say时,Say必定是调用该方法
     **/
    public void say(){
        System.out.println("Lion 的saying...");
    }
}

public class Test {
    public static void main(String[] args) {
        Animal a = new Lion ();
        a.chat();
    }
}
输出:
Animal-----chating.....
Lion 的saying...

多态可以总结如下:
指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的。即:指向子类的父类引用不能使用子类的新增的方法和属性。

这个程序中子类lion重载了父类Animal的方法chat(),重写say(),而且重写后的chat(String s)与 chat()不是同一个方法,由于父类中没有该方法,向上转型后会丢失该方法,所以执行lion的Animal类型引用是不能引用chat(String a)方法。而子类lion重写了say() ,那么指向lion的Animal引用会调用lion中say()方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值