Java (九) this与super关键字在继承中的使用

1. 闲话不说,抛出问题:

代码及运行结果如下:
Base.java

package xiaoyu.test;

class Base {
    String a = "Base1";

    private String showMe() {
        return "Base2";
    }

    public void print() {
        System.out.println(this.showMe() + " " + this.a + " " + this + " " + super.toString());
    }

}

Sub.java

package xiaoyu.test;

public class Sub extends Base {
    String a = "Sub";

    public static void main(String[] args) {
        Sub sub = new Sub();
        sub.print();
    }
}

运行结果:
这里写图片描述

2. 运行结果分析

先明确基础知识:

  • 继承:首先,Public 类型的 Sub 类继承了 Base 类,也就拥有了 Base 类的所有变量和方法,但是如果Sub类能直接访问的必须是 Public 类型的变量和方法,如果Sub类想要访问 Base 类的私有变量和方法,则必须借助公有接口(方法)。
  • this关键字:两个用途:一是引用隐式参数,二是调用该类其他的构造器。
  • super关键字:两个用途:一是调用父类的方法,二是调用父类的构造器。

运行结果分析:
首先,由于 Sub 类没有重写父类的print() 方法,所以这里调用的print()方法是从父类中继承的,所以这里实质上执行的是父类的方法。那么,问题来了:

  1. 既然是正在执行父类的方法,那么this关键字打印出来的为何是子类 Sub 的一个实例对象?如果this是子类Sub的一个引用对象的话,this 是没有权限调用父类的私有方法showMe()的。
  2. super.toString() 的打印结果为何是Sub类的一个实例?

3. 望大神指教!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值