如何从上面的类调用方法?

时间:2015-04-03 21:29:09

标签: java methods

如何从子类中调用超类中的方法?

这是我尝试做的一个例子,而不是真正的类(为了保持简单)

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类中使用循环来完成它,但这会在以后产生问题。

3 个答案:

答案 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
}