如何从子类中调用超类中的方法?
这是我尝试做的一个例子,而不是真正的类(为了保持简单)
public class Road {
private Lane lane1 = new Lane();
private Lane lane2 = new Lane();
private int activeLane = 1;
public void switchLanes(){
if(activeLane == 1){
activeLane = 2;
lane2.go();
}else if(activeLane == 2){
activeLane = 1;
lane1.go();
}
}
}
public class Lane {
public void go(){
driveLane();
// here I want to call the method switchlane in the Road class to create a "loop"
}
}
实现这一目标的最佳方法是什么? 我知道可以在Road类中使用循环来完成它,但这会在以后产生问题。
答案 0 :(得分:1)
首先关闭Lane
不是Road
的子类。它不会扩展Road
类。如果您仍想致电switchLane
,可以创建Road
的实例,然后调用它的方法
Road r = new Road();
r.switchLanes();
答案 1 :(得分:1)
您还可以保留对Road
- 父级的引用(我猜Road
类与Lane
类有某种亲子关系):
public class Lane {
private Road roadParent;
public void go(){
driveLane();
roadParent.switchLanes();
}
public void setRoadParent(Road roadParent) {
this.roadParent = roadParent;
}
}
答案 2 :(得分:1)
为了从Road
类调用Lane
类的(非静态)方法,您必须引用Road
的实例。
让我们在Lane
构造函数中获得这样的引用:
public class Lane {
private Road road;
public Lane(Road road) {
this.road = road;
}
public void go(){
// Here you can call methods of Road
road.switchLanes();
}
}
现在您必须在Road
类中进行一些更改:
public class Road {
private Lane lane1 = new Lane(this);
private Lane lane2 = new Lane(this);
// Other things
}