这里,它说:
这为MountainBike提供了与自行车相同的字段和方法,但允许它的代码只关注使其惟一的特性。这使得子类的代码易于阅读。但是,您必须注意正确地记录每个超类定义的状态和行为,因为该代码不会出现在每个子类的源文件中。
但是,在我的代码中,继承不能正常工作,可能是因为我的代码中有一个缺陷?
package java1;
class bicycle {
int speed = 0;
int gear = 1;
void accelerate(int incr) {
speed = speed + incr;
}
void decelerate(int incr) {
speed = speed - incr;
}
void changeGear(int val) {
gear = val;
}
void printInfo() {
System.out.println("Speed: " + speed + " Gear: " + gear);
}
}
class mountainbike extends bicycle {
int speed = 10;
}
public class Main {
public static void main(String[] args) {
mountainbike mb1 = new mountainbike();
mb1.accelerate(20);
mb1.accelerate(10);
mb1.printInfo();
}
}山地车课应该继承自行车课的所有特点,对吧?我添加了一个唯一的属性,即int speed = 10,因此启动速度应该是10。但是在运行编译器时,将启动速度视为0。
有什么想法吗?
发布于 2009-12-18 10:48:21
不,您的Mountainbike类不应该重新定义speed变量。您需要将初始速度(10)传递给其超类的构造函数,使用super作为构造函数调用的一部分:
package java1;
class Bicycle
{
Bicycle(int speed, int gear)
{
this.speed = speed;
this.gear = gear;
}
public void accelerate(int incr)
{
speed = speed + incr;
}
public void decelerate(int incr)
{
speed = speed - incr;
}
void changeGear(int val)
{
gear = val;
}
public String toString()
{
return "Speed: " + speed + " Gear: " + gear;
}
private int speed = 0;
private int gear = 1;
}
class Mountainbike extends Bicycle
{
public Mountainbike()
{
super(10, 1);
}
}
public class Main {
public static void main(String[] args)
{
Mountainbike mb1 = new Mountainbike();
mb1.accelerate(20);
mb1.accelerate(10);
System.out.println(mb1);
}
}我建议不要对速度和齿轮使用protected变量。通过在基类中声明speed和gear变量private来强制封装是很好的做法。
编辑:
显然,您是从Java编程开始的。我建议你看看这个免费的在线书,由布鲁斯埃克尔:Java中的思考。
发布于 2009-12-18 10:51:17
public class Bicycle {
private int speed;
public Bicycle (int speed) {
this.speed = speed;
}
}
public class Mountainbike extends Bicycle {
public Mountainbike() {
super(10);
}
}发布于 2009-12-18 10:53:03
不能覆盖字段,只能重写方法。您需要做的是将speed字段标记为protected,将构造函数添加到子类中,并在该构造函数中设置字段的值,如下所示:
class Mountainbike extends Bicycle {
public Mountainbike()
{
speed = 10;
}
}顺便说一下,请注意,我已经更正了您的类名: Java对于大写类名具有压倒性的强约定;使用小写类名只会使查看代码的人感到困惑。
https://stackoverflow.com/questions/1927480
复制相似问题