好的,我有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;
}
答案 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;
什么是位置?什么是基地,目的地和免费?这些也会导致错误,您需要在构造函数之前首先将这些变量声明为实例变量。
希望这有帮助!