добавили второй конструктор

Методы

Метод – это именованный обособленный блок кода. С методом можно выполнить три операции. Объявить – описать, что такой метод есть, но не расписывать его содержимое, т.е. тело; определить – описать метод с его структурой, т.е. телом; выполнить, т.е. запустить этот метод на выполнение.

Методы описываются внутри определения класса на том же уровне, что и переменные объектов. При объявлении метода задаются тип возвращаемого им результата и список параметров. Общая форма объявления метода такова:

тип имя_метода (список формальных параметров) {

тело метода:

}

Типрезультата, который должен возвращать метод может быть любым, в том числе и типом 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.