53 lines
1.3 KiB
Java
53 lines
1.3 KiB
Java
// reuse/FinalOverridingIllusion.java
|
|
// ©2016 MindView LLC: see Copyright.txt
|
|
// We make no guarantees that this code is fit for any purpose.
|
|
// Visit http://mindviewinc.com/Books/OnJava/ for more book information.
|
|
// It only looks like you can override
|
|
// a private or private final method.
|
|
|
|
class WithFinals {
|
|
// Identical to "private" alone:
|
|
private final void f() { System.out.println("WithFinals.f()"); }
|
|
// Also automatically "final":
|
|
private void g() { System.out.println("WithFinals.g()"); }
|
|
}
|
|
|
|
class OverridingPrivate extends WithFinals {
|
|
private final void f() {
|
|
System.out.println("OverridingPrivate.f()");
|
|
}
|
|
private void g() {
|
|
System.out.println("OverridingPrivate.g()");
|
|
}
|
|
}
|
|
|
|
class OverridingPrivate2 extends OverridingPrivate {
|
|
public final void f() {
|
|
System.out.println("OverridingPrivate2.f()");
|
|
}
|
|
public void g() {
|
|
System.out.println("OverridingPrivate2.g()");
|
|
}
|
|
}
|
|
|
|
public class FinalOverridingIllusion {
|
|
public static void main(String[] args) {
|
|
OverridingPrivate2 op2 = new OverridingPrivate2();
|
|
op2.f();
|
|
op2.g();
|
|
// You can upcast:
|
|
OverridingPrivate op = op2;
|
|
// But you can't call the methods:
|
|
//! op.f();
|
|
//! op.g();
|
|
// Same here:
|
|
WithFinals wf = op2;
|
|
//! wf.f();
|
|
//! wf.g();
|
|
}
|
|
}
|
|
/* Output:
|
|
OverridingPrivate2.f()
|
|
OverridingPrivate2.g()
|
|
*/
|