返回列表 回复 发帖

《java入门123》中修饰符的一些问题

现在看到《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中定义的,为什么会被子类调用?还有第三部分的显示,就是不同包的子类但是能调用父类中用默认修饰符过的方法。。。。有点搞混了。。。。。
2# deepnighttwo


原来如此,谢谢斑竹
返回列表