java - 子类继承父类方法的问题

查看:88
本文介绍了java - 子类继承父类方法的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

class Sup {
    int a = 9;
    public void printA(){
        System.out.println(a);
    }
}

class Sub extends Sup{
    int a = 90;
    public static void main(String[] args){
        Sub s = new Sub();
        s.printA(); // 9
    }
}

我一开始的理解是这样的,当对象调用非静态方法的时候会隐式传递一个 this, 所以 s.printA() 就传递了一个 this, printA 方法相当于

public void printA(){
    System.out.println(this.a);
}

这了this引用的对象应该是 s ,也就是子类对象,输出应该是 90。 为何会是 9呢?

解决方案

上几张图


这个是Sub子类的class文件,根据字节码显示(注意看我圈圈的部分),这里调用的是父类的printA方法(Sup.printA)。这个很好理解,因为Sub类作为子类继承了父类Sup,自然会拥有父类的public的方法。

Sub类的main方法中调用的是父类的printA方法


这个是父类的class文件,同样请注意圈圈的部分,printA调用的a变量是父类的变量(Sup.a),所以说打印的是9

这篇关于java - 子类继承父类方法的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆