Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Confusing "override a private method"

I have two question on this code

public class Override {
    private void f() {
        System.out.println("private f()");
    }
    public static void main(String[] args) {
        Override po = new Derived();
        po.f();
    }
}

class Derived extends Override {
    public void f() {
        System.out.println("public f()");
    }
} 

/*
* Output: private f()
*/// :~

1) How is function f is visible on the reference of Override po;

2) Why is output "private f()"

like image 553
Rahul Garg Avatar asked Aug 28 '09 10:08

Rahul Garg


1 Answers

  1. The main method is inside class Override, so ofcourse it can see the private members of class Override.

  2. You are not overriding method f in class Derived, there is no polymorphism. The type of the variable po is Override, so it will take method f from class Override.

Note that method f in class Override is not visible at all in class Derived. The method f in class Derived is a different method, that doesn't have anything to do with the method f in the superclass.

like image 118
Jesper Avatar answered Sep 23 '22 00:09

Jesper