一个方法重写的小案例

首先,我们创建一个父类 Father 和子类 Son:

public class Father {

    public void age() {
        say();
        System.out.println("我 50 岁啦!!!");
    }

    public void say() {
        System.out.println("我是父亲!!!");
    }
}
public class Son extends Father {

    @Override
    public void age() {
        super.age();
    }

    @Override
    public void say() {
        System.out.println("我是儿子???");
    }
}

例1

创建一个子类实例 son,并调用其 age() 方法:

public static void main(String[] a) throws Exception {
        Son son = new Son();
        son.age();
    }

输出为:

我是儿子???
我 50 岁啦!!!

可以发现,虽然子类的 age() 方法的实现是调用了父类 age() 方法,但 say() 方法实际上调用的还是子类重写后的 say()。

例2

尝试修改父类 age() 方法,将 say() 改成 this.say():

public class Father {

    public void age() {
        this.say(); // 之前是 say()
        System.out.println("我 50 岁啦!!!");
    }

    public void say() {
        System.out.println("我是父亲!!!");
    }
}

输出结果:

我是儿子???
我 50 岁啦!!!

发现输出结果仍旧是一样的,这说明这里的 this,所指的对象仍旧是子类对象 son,因此调用的还是子类重写后的 say() 方法。

例3

去掉子类重写的 say() 方法:

public class Son extends Father {

    @Override
    public void age() {
        super.age();
    }

    //@Override
    //public void say() {
    //    System.out.println("我是儿子???");
    //}
}

再次执行 main 方法,发现输出变成了:

我是父亲!!!
我 50 岁啦!!!

此时 this 指代的是父类对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值