У меня проблемы с пониманием наследования на практике в Python, у меня есть базовый класс и класс Child, унаследованный от базового класса, и я могу сослаться на элемент дочернего класса из базового класса, и не возникает ошибка , Я вижу, что ссылочный тип, передаваемый в базовый класс, относится к типу наследуемого класса, что, вероятно, объясняет, почему нет неопределенности в разрешении переменной 'val', но действительно ли это так, как наследование работает во всех других языках?
>>> class A(object):
... def test_method(self):
... print(type(self))
... print(self.val)
...
>>> class B(A):
... def __init__(self):
... self.val = 100
...
>>> b = B()
>>> dir(b)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__',
'__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__', '__weakref__', 'test_method', 'val']
>>> b.test_method()
<class '__main__.B'>
100
Пробовал то же самое в Java, и компиляторы Java пытаются найти переменную, определенную в унаследованном классе
class Parent {
int x;
public Parent(){
x = 100;
}
public void display(){
this.var = 1000;
System.out.println(this.var);
System.out.println(this.x);
}
}
public class AccessCheck extends Parent {
int var;
public AccessCheck() {
var = 2000;
}
}
Следующий результат:
Error:(10, 13) java: cannot find symbol
symbol: variable var
Error:(11, 32) java: cannot find symbol
symbol: variable var
Я надеюсь, что разница в результатах отражает то, что я пытаюсь сказать точно.