Python vs Java中的继承和属性可见性

时间:2018-11-08 20:11:17

标签: java python inheritance

我在实践中难以理解Python的继承,我有一个Base类和一个从Base类继承的Child类,并且我可以从Base类引用该子类的元素,并且不会引发任何错误。我可以看到传递给基类的引用类型是Inherited class类型,这也许就是为什么解析变量“ 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

我希望结果的差异能够传达我想确切说的话。

0 个答案:

没有答案