2014-12-16 2 views
1

Я вообще не понимаю наследства. Из того, что я читал, наследование означает, что подкласс или дочерний класс могут «наследовать» или извлекать? методы и значения из родительского/суперкласса.Объяснение примера наследования, кодирование и методы и т. Д.?

И я вроде понимаю this example, но мне все еще не очень понятно.

Если бы я должен был сделать заявление на животных, сделайте птицу и собаку, получите также утверждение if?

Вот фактический код, я не закончил последнюю часть для основного класса, потому что это было несколько ясно для меня.

Также, что такое System.out.println() делать в основном классе, печатает ли все строки?

И как получилось, когда я запускаю классы отдельно, ничего на самом деле ничего не выдает, но когда я запускаю основной класс, все печатает?

public class Animal { 
public Animal() { 
    System.out.println("A new animal has been created!"); 
} 
public void sleep() { 
    System.out.println("An animal sleeps..."); 
} 
public void eats() { 
    System.out.println("An animal eats..."); 
} 
} 

затем птица

public class Bird extends Animal { 

public Bird() { 
    super(); 
    System.out.println("A new bird has been created!"); 
    // TODO Auto-generated constructor stub 
} 
public void sleep() { 
    System.out.println("A bird sleeps..."); 
} 
public void eats() { 
    System.out.println("A bird eats..."); 
} 

} 

тогда собака

public class Dog extends Animal { 

public Dog() { 
    super(); 
    System.out.println("A new dog has been created!"); 
    // TODO Auto-generated constructor stub 
} 
public void sleep() { 
    System.out.println("A dog sleeps..."); 
} 
public void eats() { 
    System.out.println("A dog eats..."); 
} 
} 

этот главный класс

public class MainClass { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Animal animal = new Animal(); 
    Bird bird = new Bird(); 
    Dog dog = new Dog(); 

    System.out.println(); 
} 

} 
+1

'' Как это происходит, когда я запускаю классы отдельно, ничего на самом деле ничего не выводит ... »« Как вы «запускаете» классы без основного метода. Возможно, вы сбиваете с толку ** компилируете ** класс с ** запуском ** один? –

+0

@HovercraftFullOfEels: и, более того, я думаю, что вы не можете запустить класс без основного метода, не так ли? Должно быть, он получил какое-то исключение. –

ответ

2

Я попытаюсь объяснить простым способом:

Animal является super class.

Каждый animalsleeps и eats поэтому методы в super class

При создании объектов конкретных животных.

Animal animal = new Animal(); 

Вызывает конструктор Animal отпечатков:

System.out.println("A new animal has been created!"); 

    Bird bird = new Bird(); 

Вызывает конструктор Bird следующий super() переходит к конструктору Animal так гравюр как sysouts

Dog dog = new Dog(); 

И simillarly с Dog

Что такое System.out.println() делать в основном классе?

Это буквально ничего не значит. Если вы его удалите, код все равно будет распечатан. Попробуйте.

0

Проще говоря, если один класс «расширяет» класс животных до класса кошки, класс кошки наследует все методы класса животных. Это означает, что вам не нужно дважды писать эти методы, потому что, как и любое животное, кошка ест, спит, гуляет и т. Д. ... , то вы можете записать методы, специфические в классе кошки, как мурлыканье! (Или, может быть, вы хотите класс для млекопитающих, а также класс для кошачьих Тат наследуется от ...

0

how come when i run the classes separately nothing actually prints out, but when i run main class, everything prints?

код JAVA требует main Так что, когда вы запускаете другие классы, он не найдет основного метода и поэтому ничего не печатает.

В inheritance только переменные и методы, которые вы объявляете, наследуются (передаются) к подклассу. Другие вещи не имеют значения для подкласса.

Например: Рассмотрите связь между вами и вашим отцом. Здесь твой отец - суперкласс, а ты - подкласс. У вас есть все свойства вашего отца, но они могут быть не такими. Как у вас есть глаза так же, как ваш папа, но их цвет может быть другим. Заявление if можно рассматривать как любое решение, принятое вашим папой, но вам не нужно принимать это решение, поэтому оно не имеет отношения к вам.

System.out.println(); в mian не делает ничего лишнего. Вы можете удалить его.

Надеюсь, это поможет вам немного. Если у вас есть вопросы, спросите меня.

0

Наследование дает «IS A». Собака IS A животное. Птица IS A животное.

Если класс наследуется от другого класса, это означает, что он сможет вызывать методы в этом классе, как если бы они были его собственными.

Одно использование, о котором вы узнаете, это Полиморфизм. Одним из примеров является возможность итерации по списку объектов Animal, каждый из которых может быть Animal, Bird или Dog, вызывать методы суперкласса, а Java перенаправляет вызов на соответствующий класс во время выполнения. Так что если у вас есть цикл в главном классе, вы можете сделать это:

public static void main(String[] args) { 
// TODO Auto-generated method stub 
Animal animal = new Animal(); 
Bird bird = new Bird(); 
Dog dog = new Dog(); 

ArrayList<Animal> animalList = new ArrayList<Animal>(); 

animalList.add(bird); 
animalList.add(dog); 

//for each animal in the animal list 
for(Animal : animalList){ 
    sleeps(); 
    eats(); 
} 

Этот код выведет Сны и съедает звонки для птиц и собак объектов, через один список животных.

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

0

Попробуйте это,

public class Cat extends Animal { 
    public Cat() { 
     super(); 
     System.out.println("A new cat has been created!"); 
    } 
} 

Тогда в основном

Cat cat = new Cat(); 
cat.eats(); 

Это будет печатать "животное ест ...". У кошки есть метод ج() от Animal, потому что он расширил Animal. Этот пример имеет для меня немного больше смысла, потому что метод, который он наследует, не переопределяется.

0

Так что в значительной степени с примером, который вы дали, я сначала займусь легким вопросом. System.out.println(); оператор в основном методе просто печатает пустую строку. Теперь объясним, что делает каждая часть кода.

Animal animal = new Animal(); 

Этот раздел кода создает объект Animal и вызывает конструктор.

public Animal() { 
    System.out.println("A new animal has been created!"); 
} 

Следующая называется это птица птица = новая птица(); Это создает объект Bird и вызывает конструктор.

public Bird() { 
    super(); 
    System.out.println("A new bird has been created!"); 
    // TODO Auto-generated constructor stub 
} 

Что супер() делает это вызывает конструктор суперкласса, в этом случае супер класс животных. Имея это в виду выход из конструктора птицы должны быть

A new animal has been created! 
    A new bird has been created! 

Поскольку птица имеет свой собственный сон и съедает метод метод животных получает перезаписаны. Выход для bird.eat() будет

A bird eats... 

также выход для bird.sleep() будет

A bird sleeps... 

Например, когда птица была создана, когда собака собака = новая собака() ; называется созданным объектом Dog и вызывает конструктор, так как класс Dog расширяет Animal при вызове конструктора Dog, который сначала вызывает конструктор суперклассов, а затем продолжает конструктор Dogs. Это произойдет даже без вызова super() ;. Класс Dog, такой как класс птиц, показанный ранее, также перезаписывает методы .eat() и .sleep(), которые он наследует от своего суперкласса и ведет себя в той же усадьбе.

0

Прежде всего, System.out.println() в вашем основном классе печатает только новую строку. Этот метод принимает строковый аргумент (или не имеет аргумента, как указано выше), и печатает строку, за которой следует новая строка, поэтому вам не нужно вручную вводить новый escape-код строки (\ n я считаю) каждый раз, когда вы печатаете новая линия. System.out.print() делает то же самое, но не создает новую строку.

В образце вывода System.out.println() из main.java находится пустая строка между «Создана новая собака!». и «Животное спит ...»

Все остальное напечатано в методах, например: System.out.println («Собака ест ...»); Попробуйте заменить System.out.println («Собака ест ...»); с System.out.print («Собака ест ... \ n»); Он должен иметь тот же результат, если \ n действительно правильный выход для новой строки. Уведомление. Я изменил «println» на «print» и добавил \ n до конца строки.

Причина, по которой ничего не происходит, когда вы запускаете что-либо, кроме вашего основного класса, потому что основной (String [] args) является методом инициализации. Это то, что нужно искать, когда запускается ваша программа. Подумайте об этом как о зажигании вашего кода - без зажигания, где компьютер запустил ключ для запуска программы? Вы, вероятно, можете изменить это в своих настройках, но я бы не стал беспокоиться об этом сейчас

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

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