2015-12-05 3 views
1

Я пытаюсь понять, как ниже печатает HelloWorldExtendedHelloWorld,false. Я ожидаю, что он напечатает «true», так как whichMethod переопределяется в классе ExtendedHelloWorld. Если бы оба метода были общедоступными и статичными, то я думаю, что с тех пор будет иметь смысл, и родительский, и дочерний метод будут существовать, и я бы назвал родительский метод, потому что я использую ссылку HelloWorld. В этом случае, однако, методы не являются статическими, поэтому я ожидал, что тогда будет переопределено. В любом случае, родительский метод является приватным, как его можно вызывать извне? Кто-то может помочь? Благодаря!Метод Java скрыт, но не статичен

public class HelloWorld { 
    public HelloWorld() { 
     System.out.print("HelloWorld"); 
    } 

    public HelloWorld(int age) { 
     System.out.print("HelloWorldAge"); 
    } 

    private boolean whichMethod() { 
     return false; 
    } 

    public static void main(String[] args) { 
     HelloWorld example = new ExtendedHelloWorld(5); 
     System.out.println("," + example.whichMethod()); 
    } 
} 

class ExtendedHelloWorld extends HelloWorld { 
    public ExtendedHelloWorld(int age) { 
     System.out.print("ExtendedHelloWorld"); 
    } 

    public boolean whichMethod() { 
     return true; 
    } 
} 
+3

Вы не распространяете метод и на самом деле не можете его продлить, поскольку он является частным. Также обратите внимание, что допустимо использовать пробел в коде. Я редактировал ваш код для удобочитаемости. –

+0

Как это можно назвать извне? 'example.whichMethod()' – testTester

+3

Это не называется «извне». Основной метод находится внутри класса, и поэтому частный метод видим для основного. Если основной метод был в другом месте, ваш код не будет компилироваться, так как пример - это переменная HelloWorld, а частный, который в нем не будет отображаться. –

ответ

3

Вы не распространяете метод whichMethod и на самом деле не можете его продлить, поскольку он является частным. Кроме того, это не называется «извне». Основной метод находится внутри класса, и поэтому частный метод видим для основного. Если основной метод был в другом месте, ваш код не будет компилироваться, так как пример - это переменная HelloWorld, а частный, который в нем не будет отображаться.