「Java」最近在回顾static关键字的知识,突然发现以前没怎么结合考虑过静态成员与继承。即:父类的静态成员是否可以被子类继承。
在网上找了一大堆,大致分为两
无法继承派:大致有以下两个论点
1.子类修改了继承自父类静态成员变量的值后,父类的静态成员变量的值也跟着变了。因为父类的静态变量是存在一个静态内存区的,只和父类相关,和父类实例以及子类实例无关。全内存中独此一份,不可能被子类继承。
2.父类的静态方法不能被子类重写,就算子类定义了一个一模一样的静态方法,也不算,因为不满足多态要求。父类引用指向子类对象,父类引用调用重写方法结果是体现父类静态方法行为,而不是子类重写的静态方法行为。 可以继承派:主要是一些概念论证比较多
可以继承派:注意理论论证比较多
1.Java中的继承是指子类可以继承父类除了构造器之外的所有成员。(包括私有和静态)
只是继承分为了隐式继承和显示继承。私有的成员是隐式继承,子类无法直接访问。静态的可以显示继承,如可以用super来调用父类静态成员,也可以直接在子类方法中调用继承自父类的静态方法。对于静态变量,也是继承,不在子类对象中新开一开内存放父类静态变量就不算继承?继承定义好像没有这么特别注明。
现在很迷惑,好像两派都有道理?有没有哪位可以拿出静态成员在继承这块的权威论证说明下?