具有包访问权限(默认访问权限)的java跨包继承
在包a中有一个名为Vehicle的类,在包B中有一个名为Car的类。类Car扩展了Vehicle,所以它继承了Vehicle的某些元素。我的问题是汽车继承了什么
我认为它继承了所有的公共方法和变量,但在我的赋值中,我有具有包访问权限的变量(不是公共的,不是私有的),所以我必须重新声明车内车辆的所有变量,对吗?另外,还不清楚的是,我们是否可以使用equals()方法比较Car和Vehicle对象,因为即使变量名称相同,它们也不相同。还有,为什么我必须重新声明所有变量,即使我在构造函数中使用super()?变量不是在车辆中启动的吗?另外,由于我必须重新声明来自Vehicle的所有变量,我从Vehicle继承的所有公共方法都是完全无用的吗?从只有包访问权变量的类继承有什么意义
# 1 楼答案
你搞错了。它继承了Vehicle类的所有内容。受包保护的元素不能从子类访问,仅此而已。所以你不能访问这些字段和方法,也不能覆盖它们。但这并不意味着你需要重新申报
让我们举个例子。假设您设计了一个Vehicle类,并允许子类重写和访问车辆的颜色。但是假设您不希望子类干扰车辆的引擎。因此,你会得到这样的结果:
汽车是一种交通工具。既然你可以启动一辆车,你也可以启动一辆车。由于汽车有发动机,汽车也有发动机。从汽车类内部不可能对发动机进行修改或做任何事情,因为它是属于汽车类的,但汽车有一个
但是
color
字段受到保护。这意味着Car类可以访问此字段。例如,它在构造函数中对其进行修改,以便能够拥有除黑色之外的其他颜色请尝试以下代码:
你会看到引擎启动了