![](/img/trans.png)
[英]How to make a method with a return statement that is inside an abstract class which implements an interface get inherited by a subclass?
[英]Constructor with values from inherited abstract class, which implements an interface
我试图通过构造函数实例化Car类型的对象,并且收到以下2个错误:在构造函数上“静态字段Vehicle.name应该以静态方式访问”和“无法分配最终字段Vehicle.name”这个。 变量,除了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;
}
}
如果在接口上定义字段,则将其视为常量。 它是公共的,静态的和最终的。 静态意味着,在每个对象实例中没有一个单独的成员变量,该类只有一个 。 而最终意味着该价值永远无法改变。 因此,在这种情况下,名称只能是长度为0的字符串,它属于接口,而不属于任何实现Vehicle的实例。
如果希望将它们作为实例字段,请按照定义numWheels的方式定义它们,将它们放在类中,而不是在接口中。 在这里,您似乎要使Vehicle成为LandVehicle扩展的超类,因此使其成为一个类。
接口描述了对象具有的功能,而没有提供实现(默认方法除外,暂时不要使用默认方法!)。 在接口中添加常量的功能很方便,在某些情况下,指定在调用该接口的方法时可能会使用的常量很有用。 使用接口来指定您的对象承诺实现的契约,该契约将在其中实现接口的方法。 请参见JDK中的接口示例,例如java.lang.CharSequence和java.util.List。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.