2014-01-08 4 views
-3

Ok, у меня есть 2 классов, которые должны наследовать от другого класса ..Java не может получить один класс наследует от другого

Когда я двигаю поле идентификаторов над ним, говорит, что он не может получить доступ, что поля, как это частная. поэтому я вызываю метод public 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

_but it it does not work_ Что он делает? –

ответ

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; 
    } 
} 
+0

Большое спасибо! – Emperial

+0

У меня возникла еще одна проблема .. когда я пытаюсь переместить остальные поля с помощью этого метода, я получаю ошибки .. я отредактирую код, чтобы вы поняли, что я имею в виду – Emperial

+0

Как и было предложено ранее, можете ли вы показать, что такое ошибки? Я могу видеть только то, что вы пишете, а не то, что вы видите. – EdH

2

Изменения конструктору Vehicle «s так, что он принимает 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(); 
    } 

И учитывая тот факт, что мы изменили конструктор, он будет не лагер компиляции ...

+0

В нем указано, что конструктор Транспортное средство в классе транспортного средства не может быть применено к данному данному типу – Emperial

+0

Большое спасибо! – Emperial

+0

Вы удалили старый конструктор транспортного средства? Вы назвали super (id) внутри Taxi? – MadProgrammer

1

Атрибуты, объявленные как private, не могут быть доступны из подкласса. Либо объявите их как protected, либо создайте конструктор в суперклассе, который их назначает, и вызовите этот конструктор из конструктора подкласса, используя super().

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, поэтому эти поля-члены будут унаследованы от базового класса.

0

У вас есть более чем одна проблема здесь, вот что я могу видеть, как вопрос с вашим кодом:

1) Я предполагаю, что и ваш код для автомобиля и такси находятся в отдельных файлах классов. Несколько классов в одном файле могут произойти, но это плохая практика.

2) id недоступен по двум причинам. Первое - это то, что вы не вызывали super(). При расширении класса первое, что вам нужно сделать, это вызвать класс super(), чтобы захватить все переменные родителя. Во-вторых, вы получили частный доступ. Частное означает, что это видно только классу Vehicle. Вы можете исправить это двумя способами. Первый заключается в изменении visibility на нечто иное, чем личное. Во-вторых, необходимо создать методы getter and setter внутри класса Vehicle, которые позволяют изменять идентификатор из других классов при использовании setter.

3) Линия:

расположения = база; destination = null; free = true;

Что такое местоположение? Что такое база, пункт назначения и бесплатно? Это также вызовет ошибки, вам нужно объявить эти переменные сначала как переменные экземпляра перед вашим конструктором.

Надеюсь, это поможет!

Смежные вопросы