интерфейсы и классы java [закрыт]

103
04 декабря 2019, 16:00

Помогите пожалуйста разобраться с заданием. Я только начал изучать язык JAVA и пока с этим есть некоторые трудности Суть задачи:

Задание А:

Создать интерфейс Run, для описания транспорта. Интерфейс должен иметь в себе следующие методы:

1.Метод вывода имени транспортного средства. 2.Метод получения скорости передвижения транспорта 3.Метод получения массы транспорта 4.Метод получения количества пассажиров 5.Метод получения количества колес транспорта

Вот код который я написал

public interface Run {
         double getMassBus();   
         double getBusSpeed();  
         int getPassengers();   
         int getWheelAmount(); 
         String getBusInfo();  
}

Задание Б:

Создать абстрактный класс Mashine, который реализует интерфейс Run. В данном классе реализовать:

1.Константу максимальной скорости

2.Константу минимальной скорости

3.Константу минимального количества пассажиров

4.Константу максимального количества пассажиров

5.Поле с названием транспорта

6.Поле со скоростью передвижения транспорта в данный момент времени

7.Конструктор класса Mаshinе (String name, int speed)

8.Метод вывода информации о транспорте

Вот что удалось сделать

public abstract class Machine implements Run {
final int maxSpeed = 120;   //Константа максимальної швидкості
final int minSpeed = 5;     //Константа мінімальної швидкості
final int maxPasAmount = 30;    //Максимальна к-сть пасажирів
final int minPasAmount = 1;     //Мінімальна к-сть пасажирів
public String busName;      //Поле з назвою транспортного засобу
public double presentSpeed;    //Поле швидкості пересування в даний момент
//Конструктор класу Machine
public Machine(String name, double speed){
    this.presentSpeed = speed;
    this.busName = name;
}
//Реалізація методів з інтерфейсу
abstract public int getWheelAmount();
abstract public int getPassengers();
abstract public double getMassBus();
@Override
public double getBusSpeed(){
    return presentSpeed;
}
@Override
public String getBusInfo(){
    return "Назва " + busName + "\nМакс. шв: " + maxSpeed + "\nМін. шв: " + minSpeed + "\nМакс. к-сть пасажирів: " + maxPasAmount + "\nМін. к-сть пасажирів: " + minPasAmount;
}

}

Задание В: На котором все и встало

Создать супер класс "Автобус". От заданного супер класса создать двух прямых потомков "Городской" и "Междугородний двухэтажный". Потомки должны реализовывать все методы, какие нереализованные в абстрактном классе. Данные методы должны выводить на экран информацию о транспорте.

Вот до чего дошел:

   public class Bus extends Machine{
    private int wheels, amount;
    private double mass;
    //конструктор
    public Bus(String name, double speed, int wheels, int amount, double mass) {
        super(name, speed);
        this.wheels = wheels;
        this.amount = amount;
        this.mass = mass;
    }
    //методы
    @Override
    public int getWheelAmount(){
        return wheels;
    }
    @Override
    public int getPassengers(){
        return amount;
    }
    @Override
    public double getMassBus(){
        return mass;
    }
}

Задание Г:

Создать демонстрационный класс, в котором создаются экземпляры обоих потомков, и производится вызов методов для вывода информации о наше транспорте.

ПРАВИЛЬНО ЛИ БЫЛО РЕАЛИЗОВЫВАТЬ ВСЕ МЕТОДЫ ИЗ ИНТЕРФЕЙСА В АБСТРАКТЕ ИЛИ ПО ЗАДАНИЮ, ЛУЧШЕ СДЕЛАТЬ ИХ В ПОТОМКАХ? ПОМОГИТЕ, ПОЖАЛУЙСТА ИСПРАВИТЬ НЕДОЧЕТЫ В ПЕРВЫХ ДВУХ ЗАДАНИЯХ И ДОДЕЛАТЬ В И Г. бОЛЬШОЕ ВАМ, ЗАРАНЕЕ, СПАСИБО

Answer 1

Рабочий код, объект , конечно создавать в другом классе, не всегда правильно, ибо создает зависимости в коде, однако так написано в задании. Вот код с геттерами и сеттерами. Все задание сделано.

 interface Run{ 
double getMassBus(); 
double getBusSpeed(); 
int getPassengers(); 
int getWheelAmount(); 
String getBusInfo(); 
 
//Сеттеры 
void setMassBus(double Mass); 
void setBusSpeed(double Speed); 
void setPassengers(int Pass); 
void setWheelAmount(int Wheels); 
// 
} 
	 abstract class Machine implements Run{ 
private final int maxSpeed =120; 
private final int minSpeed =5; 
private final int maxPasAmount =30; 
private final int minPasAmount =1; 
 
private String busName; 
private double presentSpeed; 
 
protected Machine(String name,double speed){ 
this.presentSpeed = speed; 
this.busName = name; 
} 
 
abstract public double  getMassBus(); 
abstract public double  getBusSpeed(); 
abstract public int getPassengers(); 
abstract public int getWheelAmount(); 
//Cеттеры 
abstract public void  setMassBus(double Mass); 
abstract public void  setBusSpeed(double Speed); 
abstract public void setPassengers(int Pass); 
abstract public void setWheelAmount(int Wheels); 
// 
@Override 
public String getBusInfo(){ 
return "Название транспорта: " + busName + "  ,Скорость транспорта: " + presentSpeed; 
} 
 
						} 
												 
 class Bus extends Machine{ 
protected Bus(String name,double speed){ 
super(name,speed); 
} 
private double Mass; 
private int Pass; 
private double Speed; 
private int Wheels; 
@Override 
public double getMassBus(){return Mass;} 
@Override 
public double getBusSpeed(){return Speed;} 
@Override 
public int getPassengers(){return Pass;} 
@Override 
public int getWheelAmount(){return Wheels;}	 
//Cеттеры 
@Override 
public void  setMassBus(double Mass){this.Mass = Mass;}; 
@Override 
public void  setBusSpeed(double Speed){this.Speed = Speed;}; 
@Override 
public void setPassengers(int Pass){this.Pass = Pass;}; 
@Override 
public void setWheelAmount(int Wheels){this.Wheels = Wheels;}; 
// 
} 
 
 class CityBus extends Bus{ 
public CityBus(String name,double speed){super(name,speed);} 
 
} 
 class InterCityBus extends Bus{ 
public InterCityBus(String name,double speed){super(name,speed);} 
 
} 
 class Demo{ 
public CityBus getCityBus(){ 
CityBus CB = new CityBus("Газель",50); 
CB.setMassBus(500); 
CB.setPassengers(20); 
CB.setWheelAmount(4); 
CB.setBusSpeed(70); 
return CB;} 
public void getInfoCityBus(CityBus s){ 
System.out.println("Для Городского автобуса - "+s.getBusInfo() + " Масса: " +s.getMassBus()+ " Скорость:" + s.getBusSpeed() + " Пассажиры: " + s.getPassengers()+ " Колеса: " +s.getWheelAmount() ); 
} 
public InterCityBus getInterCityBus(){ 
InterCityBus CB = new InterCityBus("Такси",60); 
CB.setMassBus(200); 
CB.setPassengers(4); 
CB.setWheelAmount(4); 
CB.setBusSpeed(100); 
return CB;} 
public void getInfoInterCityBus(InterCityBus s){ 
System.out.println("Для Межгороднего автобуса - "+s.getBusInfo() + " Масса: " +s.getMassBus()+ " Скорость:" + s.getBusSpeed() + " Пассажиры: " + s.getPassengers()+ " Колеса: " +s.getWheelAmount() ); 
} 
} 
class qwer{ 
 
 
 
 
public static void main(String[] srgs){ 
Demo demo = new Demo(); 
CityBus cb = demo.getCityBus(); 
InterCityBus icb = demo.getInterCityBus(); 
demo.getInfoCityBus(cb); 
demo.getInfoInterCityBus(icb); 
 
} 
}

Answer 2

Методы получения чего-либо (геттеры) должны быть без аргументов.

данном классе реализовать:

...

Метод вывода информации о транспорте

не реализовали.

Данные методы должны выводить на экран информацию о транспорте.

они у вас ничего не выводят


В абстрактном классе нужно реализовать методы, которые будут иметь одинаковую логику у всех потомков. А в дочерних классов можно переопредилить методы имеющие разную логику. Например getBusInfo().

Для того чтобы реализоваь метод абстрактного класса надо убрать слово abstract, и добавить ему логики. В вашем случае надо просто вырезать весь метод getBusInfo() включая @Override из класса Bus и переместить его в класс Machine
Для того чтобы переопределить родительский метод достаточно просто переписать его тело (то что находиться в фигурных скобочках) в дочернем классе
Например

//это переопределенный метод, с другой логикой
@Override
public String getBusInfo(){
   return "Я Городской автобус!";
}
READ ALSO
Java получение сырых данных из mp3

Java получение сырых данных из mp3

У меня есть короткий mp3 файл из которого мне нужно получить сырую аудио-дорожку в виде массива для последующего преобразования ФурьеЯ пытался...

119
Тест функции в JUnit

Тест функции в JUnit

А именно как протестировать: String tasteToString() ?

98
Как использовать Scanner для char?

Как использовать Scanner для char?

В классе Scanner есть для int метод nextInt(), для double метод nextDouble(), для String метод nextLine(), а какой есть для char?

123
Вывод анимированной gif в Java

Вывод анимированной gif в Java

подскажите что я делаю не такЕсть такой код:

104