Что происходит, когда вызывается новый ClassName () ..? - PullRequest
0 голосов
/ 22 сентября 2011

Я знаю, что простыми словами Объект создан.Но я лучше поясню это по сценарию:

class A {
    public A(String path){
    }
}

class AB extends A{
    public AB(String path){
      super(path);
    }
}

class B{
    public void foo(){
        AB a = new AB("myPath");
        // now will constructor of class AB will run on another instance of 
        // AB or is there any other way "a" constructed.    
    }
}

Я спрашиваю об этом, потому что, если конструктор работает на другом экземпляре (в данном случае AB), то кто даст ему требуемый путь Stringи в конце концов, конструктор по умолчанию здесь не разрешен.)

Ответы [ 2 ]

4 голосов
/ 22 сентября 2011

В этом коде нет «другого экземпляра»;есть только один.

new AB("myPath") вызывает public AB(String path), что в свою очередь вызывает public A(String path), все в одном экземпляре.

Экземпляр AB is- экземпляр A, который в свою очередь является экземпляром Object.

1 голос
/ 22 сентября 2011

Конструктор будет "запускаться" на только что созданном экземпляре AB. Ссылка на этот экземпляр возвращается выражением new и сохраняется как значение a

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...