У меня есть вопрос относительно преобразования типов в 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()
).
Спасибо всем.