|
现在看到《java入门123》中11.3.8—访问控制符带来的覆盖问题这节,有些问题
这是测试方法
package com.javaeasy.override;
import com.javaeasy.override.diffpkg.SubClassInDiffPkg;
public class TestOverride {
public static void main(String[] args) {
System.out.println("=====使用ParentClass的对象调用test方法:=====");
ParentClass test = new ParentClass();
test.test();
System.out.println("=====使用SubClassInSamePkg的对象调用test方法:=====");
SubClassInSamePkg subSame = new SubClassInSamePkg();
subSame.test();
System.out.println("=====使用SubClassInDiffPkg的对象调用test方法:=====");
SubClassInDiffPkg subDiff = new SubClassInDiffPkg();
subDiff.test();
}
}
输出显示:
=====使用ParentClass的对象调用test方法:====
这是类ParentClass中的privateMethod方法
。。。。。。(这些显示暂时省略了)
。。。。。。
=====使用SubClassInSamePkg的对象调用test方法:=====
这是类ParentClass中的privateMethod()方法
。。。。。
。。。。。
=====使用SubClassInDiffPkg的对象调用test方法:=====
这是类ParentClass中的privateMethod()方法
这是类ParentClass中的defaultMethod()方法
。。。。。
第一部分的显示我理解,应为它是用ParentClass的引用test调用的test()方法,所以能显示所有的东西。
但是第二和第三部分,有点不懂。private修饰的方法只能在本类中被使用。那么SubClassInSamePkg的引用subSame调用test()方法的时候,为什么会显示“这是类ParentClass中的privateMethod()方法
”这个呢?这句话是在父类ParentClass中定义的,为什么会被子类调用?还有第三部分的显示,就是不同包的子类但是能调用父类中用默认修饰符过的方法。。。。有点搞混了。。。。。 |
|