Вопросы, касающиеся преобразования типов объектов в Java - PullRequest
0 голосов
/ 08 октября 2010

У меня есть вопрос относительно преобразования типов в Java следующим образом:

предположим, у меня есть класс:

class A { public void m() }

Теперь я делаю:

A a1 = new A();     // (1) 
a1.m();             // (2) 
Object o = new A(); // (3) 
o.m();              // (4) 

Мы можем сказать строку (1) как: a1 содержит адрес памяти нового объекта A() (созданного в Heap). Так что строка (2) определенно в порядке.

Мы также можем сказать строку (3) как: o содержит адрес памяти нового объекта A() (также созданного в Heap). Но строка (4), очевидно, не может быть скомпилирована, потому что класс Object не имеет метода m ().

Но почему a1 содержит адрес объекта A(), и он "видит" метод m(); в то время как o также содержит адрес объекта A(), но он «не видит» метод m()?

Есть ли другие объяснения? (За исключением причины, по которой у класса Object нет метода m()).

Спасибо всем.

1 Ответ

7 голосов
/ 08 октября 2010

Object класс не имеет метода m()

Это объяснение . Эти вещи проверяются во время компиляции. Представьте себе следующее:

Object o1 = new A();
Object o2 = new String();

void doSomething(Object o) {
    o.m(); // compilation error
}

Теперь A имеет m(), а String - нет. На это указывает ошибка компиляции . Если бы Java не был статически типизированным , эта ошибка появлялась бы во время выполнения. И считается, что чем раньше проблема обнаружена, тем лучше.

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