我试图通过构造函数实例化 Car 类型的对象,但收到以下 2 个错误:“静态字段 Vehicle.name 应以静态方式访问”和“无法分配最终字段 Vehicle.name”在构造函数 this.变量,除了 numWheels。
public interface Vehicle
{
String name = "";
int maxPassengers = 0;
int maxSpeed = 0;
}
public abstract class LandVehicle implements Vehicle
{
int numWheels = 0;
public abstract void drive();
}
public class Car extends LandVehicle
{
public void soundHorn()
{
System.out.println("Beep, beep!");
}
public void drive()
{
System.out.println("Vroom, vroom!");
}
public Car(String name, int maxSpeed, int maxPassengers, int numWheels)
{
this.name = name;
this.maxSpeed = maxSpeed;
this.maxPassengers = maxPassengers;
this.numWheels = numWheels;
}
}
最佳答案
如果您在接口(interface)上定义字段,则它被视为常量。它是公开的、静态的和最终的。静态意味着,每个对象实例中没有一个单独的成员变量,该类只有一个。最终意味着该值永远不会改变。因此,在这种情况下,名称只能是长度为 0 的字符串,并且它属于接口(interface),而不属于任何实现 Vehicle 的实例。
如果您希望它们成为实例字段,请按照定义 numWheels 的方式定义它们,将它们放入类中,而不是放入接口(interface)中。在这里,您的意思似乎是让 Vehicle 成为 LandVehicle 扩展的父类(super class),因此将其设为一个类。
接口(interface)描述了对象所具有的功能,而不提供实现(默认方法除外,暂时不用管默认方法!)。在接口(interface)中添加常量的能力很方便,在某些情况下,指定调用该接口(interface)的方法时可能使用的常量很有用。使用接口(interface)来指定对象 promise 履行的契约,其中它实现了接口(interface)的方法。请参阅 JDK 中的接口(interface)示例,例如 java.lang.CharSequence 和 java.util.List。
关于java - 具有来自继承的抽象类的值的构造函数,该抽象类实现了一个接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51486315/