我刚开始学习抽象类。
我在一些代码测试中遇到了这个抽象的类问题。我已经被对象Wagon
是如何启动的难倒了。
在Vehicle
抽象类中可以看到,它的构造函数只持有两个参数--isSedan
和seats
其中一个要求是创建货车
类。然而,正如在main(由问题提供)中所看到的,货车
对象由新货车(1000)
启动,其中缺少isSedan
和seats值。
我试图编写我的货车类,但是,我无法绕过isSedan
和座位
的超级
参数,而不改变主类中给定的上下文。我试图在谷歌上搜索更多信息,但找不到任何答案。
有人能好心开导我一下吗?
abstract class Vehicle {
protected boolean isSedan;
protected String seats;
public Vehicle(boolean isSedan, String seats) {
this.isSedan = isSedan;
this.seats = seats;
}
}
class Wagon extends Vehicle {
public Wagon(boolean isSedan, String seats) {
super(isSedan, seats);
}
// I need to write out both the super params and the mileage params, however this will not work too
// public Wagon(boolean isSedan, String seats, int mileage) {
// super(isSedan, seats);
// this.mileage = mileage;
// }
// public Wagon(int mileage) {
// this.mileage = mileage;
// }
// public int getMileage() {
// return this.mileage;
// }
}
class Main {
public static void main(String args[]) {
// 1000 is the mileage
Wagon w = new Wagon(1000);
}
}
对超类构造函数的调用必须作为子类中构造函数的第一行显式或隐式出现。也就是说,每次创建子类的实例时,其父类的一个对象将被实例化,其父类的父类将被实例化,以此类推,一直到对象
类。
在这种情况下,父类Vehicle
只声明一个构造函数,它需要两个参数。这意味着编译器不会生成任何参数构造函数。因此,编译器将无法向类的构造函数添加隐式调用super()
。
也就是说,需要显式地添加对车辆
类的构造函数的调用,并且您需要按照它的期望传递两个参数。没有办法绕过它。
没有任何特定于抽象类的东西,这就是Java中所谓的构造函数链。
然而,子类的构造函数与它调用的父类的构造函数具有不同数量的参数,这并没有什么错。
通过将
true
传递给父级的构造函数,您可以实现只接受座位数的货车的构造函数:
public Wagon(String seats) {
super(true, seats);
}
我猜这个构造函数在你遇到的代码中被意外地省略了。
问题内容: 我有两个类,和,扩展了前一个类。 具有以下构造函数: 我将注意到所有实例变量都已设置为private。 同时,具有以下构造函数: 但是,这为我的构造函数引发了“找不到符号”错误。 我尝试使用,但是我的超类的私有范围阻止了这种情况。 我发现向我的构造函数中添加字段并允许我调用超级构造函数,但是我想知道是否存在一种无需在子类构造函数中传递其所有参数的情况下调用超级构造函数的方法? 问题答案
这是基于我的最后一个问题,为什么我会得到一个类强制转换异常(与泛型类似)? 这又是我的设计。我有一个抽象的超类AbstractArrayList和两个扩展它的具体子类sorted和UnsortedArrayList。 这里的AbstractArrayList管理实际数据,因为它需要为已经实现的方法。 下面是ArrayListSorted的声明,它扩展了AbstractArrayMyList 以及导
问题内容: 我在我的应用程序中使用Spring Social: 当我申请 到我的HomeController: 注入的工作方式如预期的一样,我可以从中获取信息。但是,当我将其应用到我的其他Cotrollers时,就像这样 我收到此错误: 我的猜测是我不能将Facebook注入带有注解@Transactional的Controller吗?我四处搜寻,但找不到任何解决方案。 问题答案: CGlib有一
问题内容: 我已经用策略模式实现了一个程序。所以我有一个在某些地方使用的接口,并且可以替换具体的实现。 现在我要测试该程序。我想以类似的方式做。编写一次测试,针对该接口进行测试。应在测试开始时注入具体的接口实现,以便我可以轻松地替换它。 我的测试类看起来与此类似: 在开始测试时,必须使用参数化的构造器来注入具体的策略实施。 现在我没有让TestNG运行它并注入具体的实现实例。我试图与继承几种方法,
1.如何通过参数化构造函数设置这些属性?? 类文件 > 我想通过传递参数构造函数的setter设置这些属性,但它没有设置这些属性 在这里,我想通过toString方法显示属性 }对象文件 为什么我无法通过构造函数设置这些属性?? public class Runnable{public static void main(String[]args){Product p1=新产品(“pc”,“Grey
无论我用什么方法尝试,无论是主构造函数还是次构造函数,我都不知道如何在kotlin中声明一个带有超类和构造函数的新类。 这是我最想做的,但它给出了一个错误,期望成员声明。 这是我认为主要构造函数的外观,但它给出了相同的错误。在Internet上搜索没有帮助,我只能找到第二个示例。 那么,用一个超类和它的一个构造函数创建一个类的所有有效方法是什么呢?