Добавили второй конструктор
Методы
Метод – это именованный обособленный блок кода. С методом можно выполнить три операции. Объявить – описать, что такой метод есть, но не расписывать его содержимое, т.е. тело; определить – описать метод с его структурой, т.е. телом; выполнить, т.е. запустить этот метод на выполнение.
Методы описываются внутри определения класса на том же уровне, что и переменные объектов. При объявлении метода задаются тип возвращаемого им результата и список параметров. Общая форма объявления метода такова:
тип имя_метода (список формальных параметров) {
тело метода:
}
Типрезультата, который должен возвращать метод может быть любым, в том числе и типом void - в тех случаях, когда возвращать результат не требуется. Список формальных параметров - это последовательность пар тип-идентификатор, разделенных запятыми. Если у метода параметры отсутствуют, то после имени метода должны стоять пустые круглые скобки.
Создадим проект Car, который будет выводить на экран характеристики автомобиля. Для этого создадим класс Properties (характеристики) с полями rwheel (радиус колеса), typeBody (тип кузова), engine (объем двигателя); в этом классе создадим конструктор и два метода. Первый метод возвращает строку s (return s). Второй метод имеет тип void, т .е. ничего не возвращает, а выполняет действие – выводит на экран строку "Автомобиль имеет колеса диаметра "+this.rwheel.
public class Properties {
int rwheel;
String typeBody;
double engine;
//создаем конструктор
public Properties(int rwheel, String typeBody, double engine) {
this.rwheel=rwheel;
this.typeBody=typeBody;
this.engine=engine;
}
//создаем первый метод
String outDesk(){
String s="";
s="Автомобиль имеет следующие характеристики: кузов - "+this.typeBody+", двигатель - "+this.engine;
return s;
}
//создаем второй метод
void outWeel(){
String s;
s= "Автомобиль имеет колеса диаметра "+this.rwheel;
System.out.println(s);
}
После этого в главном методе создаем экземпляр класса ford и запускаем по очереди оба метода.
public static void main(String[] args) {
Properties ford=new Properties(17, "Седан", 2.0 );
//запускаем первый метод
System.out.println(ford.outDesk());
//запускаем второй метод
ford.outWeel();
}
У каждого метода в скобках можно помещать аргументы или параметры. С помощью аргументов можно передавать какие-либо значения методу, над которыми он будет работать. Добавим в классе Properties метод с аргументом. Для этого в классе добавим переменную String name; и метод
public void setName(String s){
name=s;
s="";
}
Описание класса должно принять вид
public class Properties {
int rwheel;
String typeBody;
String name;
double engine;
public void setName(String s){
name=s;
s="";
}
public Properties(int rwheel, String typeBody, double engine) {
this.rwheel=rwheel;
this.typeBody=typeBody;
this.engine=engine;
}
добавили второй конструктор
public Properties(String name){
this.name=name;
}
/**
*
* @return
*/
public String outDesk(){
String s="";
s="Автомобиль "+name+" имеет следующие характеристики: кузов - "+this.typeBody+", двигатель - "+this.engine;
return s;
}
void outWeel(){
String s;
s= "Автомобиль "+name+" имеет колеса диаметра "+this.rwheel;
System.out.println(s);
}
Главный метод примет вид:
public static void main(String[] args) {
String s="ford";
Properties ford=new Properties(17, "Седан", 2.0 );
//кладем в поле name название автомобиля
ford.setName(s);
System.out.println(ford.outDesk());
ford.outWeel();
}
Если два или более метода класса имеют одно имя, но их параметры не совпадают, то такие методы называются перегруженными. Примерами таких методов служат конструкторы (как в последнем примере).
Если в родительском и дочернем классе есть методы с одинаковыми именами и одинаковыми параметрами в таком случае говорят о переопределении методов (учим работать с дочерним классом). Т.е. в дочернем классе изменяется реализация уже существовавшего в базовом классе метода (на прошлой паре мы переопределяли метод toString). Создадим проект в котором будут два метода с одинаковыми именами.
Создадим родительский класс Wheels (колесо):
public class Wheels {
String manufact;
int size;
String typeDisk;
String typeWheel;
//создаем конструкторы
public Wheels(){};
public Wheels( String manufact, int size, String typeDisk, String typeWheel){
this.manufact=manufact;
this.size=size;
this.typeDisk=typeDisk;
this.typeWheel=typeWheel;
}
//создаем метод
public String setName(String s){
String name;
name="Наименование производителя резины "+s;
return name;
}
Создаем дочерний класс:
public class CarProp extends Wheels{
String name;
String typeBody;
double engine;
//создаем конструктор
public CarProp(){};
public CarProp (String name, String typeBody,double engine){
this.name=name;
this.typeBody=typeBody;
this.engine=engine;
}
//создаем метод переопределяем родительский
public String setName(String s){
s="Марка автомобиля "+s;
return s;
}
Главный метод:
public static void main(String[] args) {
Wheels w=new Wheels("Goodyear", 17, "литые", "зимняя");
CarProp c=new CarProp("ford", "Седан", 2.0);
System.out.println(w.setName(w.manufact));
System.out.println(c.setName(c.name));
}
Если пометить метод модификатором final, то метод не может быть переобпределен. Иногда требуется, чтобы методы были не определены, а только объявлены. Такие методы могут быть реализованы в дочерних классах. В таком случае нужно использовать модификатор abstract.