super是为了获取被隐藏的直接父类属性,当this和super实际都是指向当前对象。
Test t = new Test(); t.test(); 等价于 Test::test(final Test this), 在方法中, this相当于形式参数, 调用的对象是实际参数,通过super调用实例方法时,用的invokespecial指令, 来避免此时发生多态。本质上super并非一个合法的引用,并不能单独使用, 仅仅是一个起到指示作用的关键字,this和super都指向都一个对象,实际上也只存在一个对象, 不存在什么父类对象,只不过super指向分类的属性和方法, this.i和super.i是当前对象中两个名字不同的字段而已。
protected:
子类只能在自己作用范围内(同包或者子类类本身)访问自己继承父类的那个protected域,即使是在这个子类内new 一个该子类对象也访问不了), 同包是指使用方和父类同包 !!!
注意从内存的角度去理解访问权限!!









网友评论