У меня есть следующие 3-х классов в одном пакете:доступа методы родительского класса и переменные
class Machine {
protected int id;
public Machine(int i) {
id = i;
}
public void start() {
System.out.println("Machine " + id + " starting.");
}
}
class Car extends Machine {
protected int id;
public Car(int i) {
super(i);
id = i;
}
public void start() {
super.start();
System.out.println("Car " + id + " starting.");
System.out.println("I can access parent variable" + super.id);
}
}
public class Application {
public static void main(String[] args) {
Machine machine = new Machine(2);
Car car = new Car(3);
car.start();
machine.start();
machine = car;
machine.start();
}
}
У меня есть несколько вопросов об этом сейчас. Пожалуйста, дайте мне знать, если я перестану рассуждать, и я попытаюсь перефразировать себя.
- Могу ли я получить доступ к методам и переменным car.super из основного класса ? Если да, то как?
- Когда я создаю экземпляр объекта Car, я также должен инициализировать члены класса машины , вызвав его конструктор. Имеет ли это значение , что когда я создаю новый объект автомобиля, используется общая память - это размер объекта автомобиля + размер машины объект?
- Когда у меня есть одна и та же переменная 'id' в обоих классах и доступ к ней с использованием объекта Car Я получаю идентификатор автомобиля, но когда у меня его есть только в классе Machine и его доступе, Я бы'. Является ли это означающим, что по сути, я переопределяю идентификатор машины. Я был в предположении, что переменные-члены нельзя переопределить, только методы могут.
Вы должны прочитать некоторые учебники по тегам: наследование, полиморфизм – DeiAndrei
у меня есть, но им не хватает на несколько деталей. – Shan
1. Да. См .: http://docs.oracle.com/javase/tutorial/java/IandI/super.html Дополнительная информация: http://docs.oracle.com/javase/tutorial/java/IandI/override.html –