2016-05-25 2 views
-4

У меня есть основная идея: у нас есть класс, который имеет атрибут и метод; однако я смущен тем, как это работает. Например. c2.chat(c3); У меня есть корова, равная теленку, и вызов функции chat() на теленка. Почему мы используем функцию chat() в классе Calf против функции chat() в классе Cow? Что такое поле c2 в этом вызове?Понимание атрибутов и методов в Java

class Cow{ 
     String say = "C"; 
     String speak(){ 
      return say; 
     } 
     void chat(Cow c1){ 
      System.out.println("A " + this.speak() + " B " + c1.speak()); 
     } 
    } 
    class Calf extends Cow{ 
     Calf(){ say = "H";} 
     void chat(Cow c1){ 
      System.out.println("F " + this.speak() + " G " + c1.speak()); 
     } 
    } 
    class Main{ 
     public static void main(String[] args){ 
      Cow c1 = new Cow(); 
      Calf c3 = new Calf(); 
      Cow c2 = c3; 
      c1.chat(c2); 
      c2.chat(c3); 
      c3.chat(c2); 
      c1.chat(c3); 
      c3.chat(c1); 
     } 
    } 

Выход:

A C B H 
F H G H 
F H G H 
A C B H 
F H G C 
+0

Каков ваш вопрос в конце концов? –

+0

Вы используете метод 'chat()' в классе 'Calf', если он имеет свою уникальную функциональность. 'c2' - это копия' c3', и это компилируется из-за наследования. –

+0

@ sᴜʀᴇsʜᴀᴛᴛᴀ См. Последние две строки текстового блока. – Peter

ответ

0

Так как ваш используются существующий метод для класса коровы и теленок происходит от коровы, методы чатов отличаются на основе свойств икры по сравнению с коровой , Следовательно, метод разговора может использоваться в обоих классах. Хотя оба они основаны на том, что они могут говорить, по-разному. Еще одна заметная разница - переменная «say» определяется по-разному для Calf vs. a Cow.

Поле c2 создает экземпляр класса Calf для нового объекта, который является коровой. Если я правильно понимаю, это будет использование полиморфизма.

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