2017-01-14 4 views
-1

Прошу объяснить концепцию наследования + переопределить на основе следующего кода.Домашнее задание: объяснение наследования + переопределение в Java

public class Item { 

private String itemType; 
private String serialNumber; 

public Item(String serialNumber, String itemType) { 
    this.setItemType(itemType); 
    this.setSerialNumber(serialNumber);  
} 

public String getItemType() { 
    return itemType; 
} 

public void setItemType(String itemType) { 
    this.itemType = itemType; 
} 

public String getSerialNumber() { 
    return serialNumber; 
} 

public void setSerialNumber(String serialNumber) { 
    this.serialNumber = serialNumber; 
} 

public String printItem() { 
    return serialNumber + "," + itemType; 
} 
} 



public class Ipad extends Item { 

private int ram; 

public Ipad(String serialNumber, int ram) { 
    super(serialNumber,"iPad"); 
    this.setRam(ram); 
} 

public int getRam() { 
    return ram; 
} 

public void setRam(int ram) { 
    this.ram = ram; 
} 

public String printItem() { 
    return super.getSerialNumber() + "," + super.getItemType()+ "," + getRam() + " GB"; 
} 
} 

У меня есть трудное время на самом деле объяснить, что происходит, так как я очень новичок в изучении Java :) Я не буду комментировать каждую линию на моей, пока я не получу больше практики, но до сих пор шаг за -ступенчатые комментарии, кажется, лучший способ для меня понять вещи.

1) Что происходит в кодере ниже: Я предполагаю, что это конструктор, но что делают две строки ниже?

public Item(String serialNumber, String itemType) { 
    this.setItemType(itemType); 
    this.setSerialNumber(serialNumber); 

2) Что происходит внизу - есть два конструктора? Как я понимаю, конструктор нельзя переопределить. Я предполагаю, что супер вызывает конструктор из суперкласса, но затем добавляется новая переменная ram. Так это то, что называется цепью конструктора, если оно не переопределяется?

public Ipad(String serialNumber, int ram) { 
    super(serialNumber,"iPad"); 
    this.setRam(ram); 
} 

3) Что переопределяется?

4) Как (помимо использования ключевого слова extends + super keywords) я объясню наследование с помощью этого примера?

+5

Пожалуйста, постарайтесь ограничить 1 вопрос на ... вопрос. – Idos

+0

Извините, я понимаю, что это выглядит подавляющим .. :) –

+0

Я бы предложил вам попробовать исходный код, используя множество ответов, которые вы найдете здесь, или поиск по Google и некоторые набрав сами. Попытайтесь наследовать понятия и ограничения наследования по мере ввода: например, попробуйте использовать частный метод базового класса из производного класса. Он не будет компилироваться. Так что попробуйте все, и вы получите хорошую картину. Даже измените базовый класс, если вам нужно. – efekctive

ответ

1

1) Фрагмент Предоставленный создания объекта элемента с параметрами для серийного номера и типа элемента; который, как вы видите в конструкторе класса Item, просто задает серийный номер и тип элемента предоставленным аргументам. Конструкторы обычно имеют аргументы, необходимые для функционирования объектов, и именно поэтому они есть. Чтобы объект был полностью «построен».

public Item(String serialNumber, String itemType) { 
this.setItemType(itemType); 
this.setSerialNumber(serialNumber); 

2) Конструктор цепочки, когда объект ссылается на другой один из его конструкторов, позволяя функциональность строительства для повторного использования с различными аргументами были предоставлены на объект для строительства. В примере, который вы указали, объект IPad просто наследует конструктор Item. В качестве подкласса IPad требуется ссылаться на конструктор Item внутри его собственной конструкции. Это должно быть сделано в первой строке. Таким образом, вы не можете переопределять конструкторы, однако вы добавляете дополнительные функциональные возможности для построения класса IPad, не присутствующего в классе Item, путем установки ram в том, что было предоставлено в аргументах конструктора IPad.

public Ipad(String serialNumber, int ram) { 
super(serialNumber,"iPad"); 
this.setRam(ram); 

3) Вы не отвергая ничего в этом примере, кроме #printItem, который добавляет барана элемента на печатной строкового представления элемента. Помимо этого вы просто наследуете и добавляете класс Item через класс Ipad.

4) Вы можете объяснить это, используя простой английский.IPad - это элемент и имеет все функциональные возможности и данные в качестве элемента, с добавлением его собственных специальных функций и данных IPad.

Вы также можете сравнить это с другой ситуацией. Например, с прямоугольниками и квадратами. Квадрат - это прямоугольник, однако прямоугольник не обязательно является квадратом, хотя это может быть. IPad - это элемент, однако Item не обязательно является IPad, хотя это может быть. Это спецификация, ветвь ее более общего родителя.

+0

Большое спасибо, Justisr! Это прояснило это для меня так много :) Итак, на самом деле здесь нет главного присутствия? –

+0

Я отредактировал свой ответ, чтобы исправить ошибку, которую я сделал на # 3, вы переопределяете метод printItem. Прошу прощения за то, что раньше этого не видел. Хотя я рад, что остальная часть моего ответа была вам полезна.^- ^ – justis

0

Вы можете объяснить этот пример:

Item item = new Ipad("serial", 123); 
System.out.println(item.printItem()); 

Вы можете сказать, что метод printItem() выполняется с внедрением в Ipad класса, потому что Ipad наследует его от Item и перекрывает его.

Так, printItem() напечатает "serial, iPad, 123"