子类为什么可以访问父类的私有方法
Aug 20, 2016 am 09:03 AM
<code>class PrivateOverride { private void f() { System.out.println("private f()"); } public void hello(){ this.f(); this.bar(); } protected void bar(){ System.out.print("pri bar"); } } class Derived extends PrivateOverride { public void f() { System.out.println("public f()"); } public void bar(){ System.out.print("deri bar"); } } class Test4{ public static void main(String[] args) { Derived po = new Derived(); po.hello(); } }</code>
输出:
private f()
deri bar
为什么呢
回复内容:
<code>class PrivateOverride { private void f() { System.out.println("private f()"); } public void hello(){ this.f(); this.bar(); } protected void bar(){ System.out.print("pri bar"); } } class Derived extends PrivateOverride { public void f() { System.out.println("public f()"); } public void bar(){ System.out.print("deri bar"); } } class Test4{ public static void main(String[] args) { Derived po = new Derived(); po.hello(); } }</code>
输出:
private f()
deri bar
为什么呢
首先这里并非直接调用
private
的f()
方法,就像getter
方法能拿到private
实例变量一样,这个无需解释。这里有个继承的问题:
Derived
类里的f方法
并非是其父类PrivateOverride f方法
的重写, 因为重写方法要求重写后方法的访问权限修饰符不能比父类更严格,在hello
方法里执行this.f()
,编译器优先找最近的f
(即父类的f
),所以打出了private f()
。
当然,在实际开发中,要尽量避免这种混淆,做做基础面试题还可以。
你是通过公有的方法去访问私有的方法,这是可以的
public void hello() 是公有方法
它是允许调用本类的私有方法
依照你上述的例子并不能说子类能访问父类的私有方法。因为hello
本身就是父类的方法。
如果子类是这样:
<code>class Derived extends PrivateOverride { public void hello() { System.out.println("public f()"); } public void bar(){ this.f(); //... } }</code>
如果能正常运行才能说明子类能够访问父类的私有方法。

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP

Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP?

Cuti atau kembali dari Java 8 Stream Foreach?

Program PHP untuk mengira vokal dalam rentetan

Java Made Simple: Panduan Pemula untuk Kuasa Pengaturcaraan

Cipta Masa Depan: Pengaturcaraan Java untuk Pemula Mutlak

Program Java untuk mencari kelantangan kapsul
