有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

具有包访问权限(默认访问权限)的java跨包继承

在包a中有一个名为Vehicle的类,在包B中有一个名为Car的类。类Car扩展了Vehicle,所以它继承了Vehicle的某些元素。我的问题是汽车继承了什么

我认为它继承了所有的公共方法和变量,但在我的赋值中,我有具有包访问权限的变量(不是公共的,不是私有的),所以我必须重新声明车内车辆的所有变量,对吗?另外,还不清楚的是,我们是否可以使用equals()方法比较Car和Vehicle对象,因为即使变量名称相同,它们也不相同。还有,为什么我必须重新声明所有变量,即使我在构造函数中使用super()?变量不是在车辆中启动的吗?另外,由于我必须重新声明来自Vehicle的所有变量,我从Vehicle继承的所有公共方法都是完全无用的吗?从只有包访问权变量的类继承有什么意义


共 (1) 个答案

  1. # 1 楼答案

    你搞错了。它继承了Vehicle类的所有内容。受包保护的元素不能从子类访问,仅此而已。所以你不能访问这些字段和方法,也不能覆盖它们。但这并不意味着你需要重新申报

    让我们举个例子。假设您设计了一个Vehicle类,并允许子类重写和访问车辆的颜色。但是假设您不希望子类干扰车辆的引擎。因此,你会得到这样的结果:

    public class Vehicle {
        private Engine engine;
        protected Color color = Color.BLACK;
    
        public Vehicle() {
            this.engine = new Engine();
        }
    
        public final void start() {
            System.out.println("starting engine...");
            engine.start();
            System.out.println("engine started");
        }
    
        public final Color getColor() {
            return this.color;
        }
    }
    
    public class Car extends Vehicle {
    
        public Car(Color color) {
            super();
            this.color = color;
        }
    }
    

    汽车是一种交通工具。既然你可以启动一辆车,你也可以启动一辆车。由于汽车有发动机,汽车也有发动机。从汽车类内部不可能对发动机进行修改或做任何事情,因为它是属于汽车类的,但汽车有一个

    但是color字段受到保护。这意味着Car类可以访问此字段。例如,它在构造函数中对其进行修改,以便能够拥有除黑色之外的其他颜色

    请尝试以下代码:

    Car car = new Car();
    car.start();
    

    你会看到引擎启动了