не пойму как присобачить "Полкана" к "большому псу" сохраняя вызов конструктора предка. в остальном всё работает как надо
public class myDog{
public static void main(String[] args){
Dog dog1 = new Dog("Тузик", 2);
bigDog bdog = new bigDog("Полкан", 3);
Dog dog2 = new Dog();
Dog dog3 = new Dog(3);
dog1.voice();
dog2.voice();
dog3.voice();
bdog.voice();
System.out.println("всех собак: "+Dog.count);
}
}
public class Dog {
private int age;//возраст
private String name; //кличка
static int count = 0;//количество
public Dog(String name, int age) {
this.name = name; this.age = age;
count++;
}
public Dog(){
name = "щенок";
count++;
}
public Dog(int age){
name ="дворняга";
this.age = age;
count++;
}
public void voice() {
System.out.print("я "+name+": ");
for(int i = 1; i <= age; i++) System.out.print("-гав");
System.out.println();
}
}
class bigDog extends Dog{
bigDog (String name, int age) {
super(name, age);
}
public void voice() {
System.out.print("я большой пёс");
for(int i = 1; i < 5; i++) System.out.print("-ГАВ");
System.out.println();
}
}
результат:
я Тузик: -гав-гав
я щенок:
я дворняга: -гав-гав-гав
я большой пёс-ГАВ-ГАВ-ГАВ-ГАВ
всех собак: 4
а хотелось бы:
я Тузик: -гав-гав
я щенок:
я дворняга: -гав-гав-гав
я большой пёс Полкан: -ГАВ-ГАВ-ГАВ-ГАВ
всех собак: 4
если ещё подробнее то:
в классе bigDog переменная name всего лишь параметр и не видна методу voice
и нельзя объявить System.out.print("я большой пёс"+name);
с другой стороны name необходим super для вызова конструктора предка
всем спасибо вопрос решил добавлением поля name
class bigDog extends Dog{
private String name;
bigDog (String name, int age){
super(name, age);
this.name = name;
}
public void voice(){
System.out.print("я большой пёс "+name);
for(int i = 1; i < 5; i++) System.out.print(" -ГАВ");
System.out.println();
}
}
всё работает как и задумывалось но с точки зрения ооп java всё ли верно и соответствует настроению?
объявляйте свои классы всегда с большой буквы BigDog, MyDog
public class Dog {
...
/* добавить геттер*/
public String getName() {
return this.name;
}
}
в классе BigDog в вывод добавить getName():
class BigDog extends Dog{
BigDog (String name, int age) {
super(name, age);
}
public void voice() {
System.out.print("я большой пёс " + getName() + ":");
for(int i = 1; i < 5; i++) System.out.print("-ГАВ");
System.out.println();
}
}
и все работает:
я Тузик: -гав-гав
я щенок:
я дворняга: -гав-гав-гав
я большой пёс Полкан:-ГАВ-ГАВ-ГАВ-ГАВ
всех собак: 4
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
господаЕсть такое задание: разработать программу, изображающую на экране работающие электронные часы с цифровым индикатором, а также с индикацией...
Mozilla декодирует закодированный url в адресной строкеИз-за чего получаю bad request, т
Есть ли способ заставить Классы в TypeScript компилироваться в Фабричные Функции, где приватные свойства и методы не будут попадать в прототип?...
Хочу написать "патч" для одной веб игры (На JS), весь код минифицирован, поэтому лезть в него не самая лучшая идея