多态,如何理解父类引用指向子类对象

先放死板的说明:

     一、使用父类类型生成子类的对象;

    二、该引用只能调用父类中定义的方法和变量;

    三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)

    四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。

多态的3个必要条件:

  1.继承   2.重写   3.父类引用指向子类对象。


再放简单易懂的代码:

首先生成一个父类

public class Father {
    public void func1(){    //这是等下我们调用的方法
        func2();
    }

    public void func2() {    //下面的子类重写了这个方法,当我调用的时候,这个方法不再生效,转而调用子类的方法
        System.out.printf("父类的第二个方法");
}

然后生成一个子类继承父类

public class Child extends Father {
    public void func1(int i) {    //为什么不调用这个方法呢,实际上他跟父类的方法不同。这个有参数
        System.out.printf("子类第一个方法");
    }

    public void func2() {
        System.out.printf("子类的第二个方法");
    }
}


main函数中的写法

Father bianliangA = new CHild();

public static void main(String addd []){
     Father bianliangA = new Child();
     bianliangA.func1();
  }

那么该程序将会打印出什么样的结果呢?   很显然应该是“子类的第二个方法” 

        子类Child继承了父类Father,并重载了父类的func1()方法,重写了父类的func2()方法。

重载后的 func1(int i)和func1()不是同一个方法,由于父类中没有func1(int i),父类的引用child就不能调用func1(int  i)。

而子类重写了func2()方法,那么父类类型的引用child在调用该方法时将会调用子类中重写的func2()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值