Java的继承:方法;属性?

Java的继承:方法;属性?

前言

最近公司有个需求需要用 方法模板模式 改造一部分冗余的代码,因为涉及到Java中父、子类之间的继承重写,所有来记录一下
这里抛出一个问题:前提 父类声明的子类对象(例如 父类 aa = new 子类()
如果aa 调用重写的方法 调用的是 父类的?还是子类的?
如果aa 调用重写的属性 调用的是 父类的?还是子类的?

结论:调用方法是子类重写的方法。而属性是父类的属性。

前置知识

绑定:指的是一个方法的调用与方法所在的类(方法主体)关联起来。对java来说,绑定分为静态绑定和动态绑定。
静态绑定:在程序执行前方法已经被绑定(也就是说在编译过程中就已经知道这个方法到底是哪个类中的方法),此时由 编译器或其它连接程序实现。
动态绑定: 在运行时根据具体对象的类型进行绑定。

结论:在Java中对属性采用静态绑定,对方法采用动态绑定

代码案例

父类:

public class Animal {
    public String name = "动物名";
    public String moodName = "动物开心地";

    public void eat() {
        System.out.println("动物的吃法---");
        System.out.println(this.name);
        this.mood();
    }

    public void mood() {
        System.out.println(this.moodName);
    }
}

子类:

public class Dog extends Animal{
    public String moodName = "小狗激动地";

    @Override
    public void mood() {
    	System.out.println("子类方法");
        System.out.println(this.moodName);
    }
}

主方法:

public class TestMain {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.eat();
    }
}

输出:
在这里插入图片描述

分析一波:

  1. Animal dog = new Dog(); 这里 引用为父类,new的对象为子类
  2. dog.eat();因为Dog本身没有重写eat()方法,所以会走到父类的eat方法 在这里插入图片描述在这里插入图片描述
  3. 紧接着打印“动物的吃法—”;打印Animal.name;
    在这里插入图片描述
  4. 然后执行this.mood(); 因为子类已经重写该方法,所以执行子类的方法 打印“子类方法”、Dog.moodName
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

coderzpw

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

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

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

打赏作者

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

抵扣说明:

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

余额充值