Java无法从一个类继承另一个类

时间:2014-01-08 02:53:07

标签: java

好的,我有2个类需要从另一个类继承..

当我移动id字段时,它表示它无法访问那些字段,因为它是私有的。所以我称之为公共get方法......但它仍然无效。我需要做的是将所有场地移动到车辆中并使出租车+班车从其继承

  public class Vehicle
{
    // A unique ID
    private String id;
    // The destination
    private String destination;
    // The location of this taxi.
    private String location;
        /**
     *Constructor for vehicle
     */
    public Vehicle(String id)
    {
        this.id=id;
    }

5 个答案:

答案 0 :(得分:2)

更改Vehicle的构造函数,使其成为int参数,然后将其分配给类id字段

public Vehicle(int id) {
    this.id = id;
}

现在,您需要在您的子课程中调用super(int ),这将设置id字段

    public Taxi(String base, String id){
        super(id);
        //...
    }

ps-我不知道这是做什么的,但它没有做任何事......

    public void ID(){
        Vehicle id= new Vehicle();
        id.getID();
    }

鉴于我们已经改变了构造函数,它将不会编译......

答案 1 :(得分:1)

无法从子类访问声明为private的属性。将它们声明为protected或在分配它们的超类中创建构造函数,并使用super()从子类的构造函数中调用该构造函数。

答案 2 :(得分:1)

public class Vehicle
{
    // A unique ID
    private String id;
    // The destination
    private String destination;
    // The location of this taxi.
    private String location;

    /**
     *Constructor for vehicle
     */
    public Vehicle(String id)
    {
        this(id, null);
    }

    /**
     *Constructor for vehicle
     */
    public Vehicle(String id, String location)
    {
        this.id = id;
        this.location = location;
    }

    /**
     * Returns ID.
     * 
     */
    public String getID()
    {
        return id;
    }

    public String getDesitnation() {
        return destination;
    }

    public void setDestination(String destination) {
        this.destination = destination;
    }

    public String getLocation() {
        this.location = location;
    }

    public void setLocation(String location) {
        this.location = location;
    }
}

public class Taxi extends Vehicle   

    // Whether it is free or not.
    private boolean free;

    /**
     * Constructor for objects of class Taxi.
     * @param base The name of the company's base.
     * @param id This taxi's unique id.
     */


    public Taxi(String base, String id)
    {
        super(id, base);
        free = true;
    }
}

public class Shuttle extends Vehicle
{
    // The circular route of this shuttle.
    private ArrayList<String> route;
    // The destination number in route that the shuttle is
    // currently headed for.
    private int destinationNumber;

    /**
     * Constructor for objects of class Shuttle
     * @param id This shuttle's unique id.
     * @param route The route taken by this shuttle.
     *              The first entry is the starting location.
     */
    public Shuttle(String id, ArrayList<String> route)
    {
        super(id);
        this.route = route;
    }
}

答案 3 :(得分:0)

When i move id fields over it says that it cannot access that fields as it is private.
这个词已经告诉你继承的限制。

在Java中,每个类都可以包含完整的private数据,关键字private符号只有这个类可以拥有的数据,即使你从中扩展,那些继承的类仍然不能使用private字段。

要在Java中利用继承进展,但仍然不希望通过包中的类访问,则需要将其设为protect而不是private范围,因此这些成员字段将继承自基类。

答案 4 :(得分:0)

这里有多个问题,这就是我所看到的代码问题:

1)我假设您的Vehicle和Taxi的代码都在单独的类文件中。可能会发生一个文件中的多个类,但这是一种不好的做法。

2)由于两个原因无法访问id。第一个是因为你没有调用super()。扩展类时,首先要做的是调用super()类来获取所有父变量。第二个是因为你给它私人访问。私有意味着它只对Vehicle类可见。你可以用两种方法解决这个问题第一种是将visibility更改为私有以外的其他内容。第二种是在Vehicle类中创建getter and setter方法,允许您在使用setter时从其他类更改id。

3)行:

  

location = base; destination = null; free = true;

什么是位置?什么是基地,目的地和免费?这些也会导致错误,您需要在构造函数之前首先将这些变量声明为实例变量。

希望这有帮助!