Перегрузка методов (конструкторов)
Использование ключевого слова this.
Структура проекта
public class Box{ //Сущность – Коробка //поля (свойства сущности) – длина (глубина), ширина, высота коробки private double d, w, h; //скрыты в классе //методы-конструкторы отличаются набором параметров // перегружаются в зависимости от параметров вызова public Box(){d=0.0; w=0.0; h=0.0;} // без параметров public Box(double d, double w, double h ){ // три double-параметра this.d=d; this.w=w; this.h=h;} // this – ссылка на объект, запустивший метод public Box (Box ob){ //построить клон объекта ob (параметр – объект!) d=ob.getD(); w=ob.getW(); h=ob.getH(); } public Box (double len){ // конструктор для куба (один double-параметр) d=w=h=len; } // public-интерфейс для доступа к private-полям //public-методы-геттеры для доступа к private-полям public double getD(){return d;} public double getW(){return w;} public double getH(){return h;} // public-методы-сеттеры для доступа к private-полям public void setD(double d){this.d=d;} public void setW(double w){this.w=w;} public void setH(double h){this.h=h;} //другие полезные методы // следующие два метода – без параметров, // т.к. любой метод-член класса имеет доступ ко всем // переменным-членам-класса public double volume(){return d*w*h;} //возвращает объем public String toString(){ //возвращает строку описания объекта return "Box: d="+d+", w="+w+", h="+h; } public boolean eguals (Box box){ //сравнение (параметр – объект) // возвращает true, если размеры запустившей // метод коробочки (this) равны размерам // коробочки-параметра if (box==this) return true; // ссылки равны – одна и та же коробочка if (d==box.getD() && w==box.getW() && h==box.getH()) return true; else return false; } }
public class TestBox{ public static void main (String args[]){ //создание объектов //демонстрируется перегрузка методов (конструкторов) Box box1=new Box(); //создана коробочка box1 Box box2=new Box(box1); //создан клон (копия) box1 Box box3=new Box(6.2,4.5,3.9); //создана коробочка box2 Box box4=new Box(box3); //создан клон (копия) box2 Box box5=new Box(5); // кубическая коробочка box5 Box box6=new Box(box5); //создан клон box5 //Выводим данные о всех созданных коробочках System.out.println("Первая коробочка: "+box1.toString()); System.out.println("Вторая коробочка (клон первой): "+box2.toString()); //Метод println (print, printf) использует метод // toString() объекта по умолчанию (т.е. если он явно не указан) System.out.println("Третья коробочка: "+box3); System.out.println("Четвертая коробочка (клон третьей): "+box4); System.out.println("Пятая коробочка: "+box5); System.out.println("Шестая коробочка (клон пятой): "+box6); // демонстрируется доступ к private-полям и // использование метода volume() //изменим размеры первой коробочки //для доступа к private-полям используем методы-сеттеры box1.setD(5.5); box1.setW(5.5); box1.setH(5.5); System.out.println("Первая коробочка после изменения размеров: " +box1); //вычислим и выведем суммарный объем первой и третьей коробочки double a=box1.volume()+box3.volume(); System.out.println( "Суммарный объем первой и третьей коробочки: "+a); //вычислим и выведем суммарную высоту первой и третьей коробочки //для доступа к private-полям используем методы-геттеры System.out.println( "Суммарная высота первой и третьей коробочки: "+ (box1.getH()+box3.getH())); //Создадим новые коробочки с другими размерами, используя //уже определенные в программе ссылочные переменные. //Связь с объектами, на которые эти переменные ссылались //ранее будет потеряна, и эти объекты будут автоматически //утилизированы "сборщиком мусора" Java box1=new Box(6.2,4.5,3.9); //создана коробочка box2=box1; // box1 и box2 ссылаются на одну и ту же коробочку box3=new Box(box1); //создана еще одна коробочка - клон box1 box4=new Box(7.5); // и еще одна коробочка с другими размерами //Выведем данные о новых коробочках System.out.println("Созданы новые коробочки:"); System.out.println("Первая коробочка: "+box1); System.out.println( "Вторая коробочка, на самом деле та же, что и первая: " +box2); System.out.println("Третья коробочка (клон первой): " +box3); System.out.println("Четвертая коробочка: "+box4); //сравним коробочки // демонстрируется применение метода eguals c параметром-объектом System.out.println("Результаты сравнения коробочек :"); System.out.println("box1==box2: "+box1.eguals(box2)); System.out.println("box1==box3: "+box3.eguals(box1)); System.out.println("box1==box4: "+box1.eguals(box4)); System.out.println("box2==box3: "+box2.eguals(box3)); System.out.println("box3==box4: "+box4.eguals(box3)); } }
Создание объектов Оператор Box box1=new Box(); комбинирует в себе два шага:
1) Box box1; Создается ссылка на объект типа Box, которой присваивается значение null, т.е. переменная box1 пока не указывает на конкретный объект.
2) box1=new Box(); Операция new распределяет динамически (т.е. во время выполнения программы) память для объекта и возвращает ссылку на нее (адрес блока памяти). Эта ссылка сохраняется в переменной box1.
Если символическое обозначение ссылок представить в виде конкретных адресов, может получиться примерно следующее:
Перегрузка методов (конструкторов).
Box box1=new Box(); При создании объекта для инициализации полей объекта использовался конструктор без параметров. Box box2=new Box(6.2,4.5,3.9); При создании объекта для инициализации полей объекта использовался конструктор с параметрами.
В Java класс может содержать несколько методов с одинаковыми именами. Эти методы обязательно должны отличаться набором параметров, иначе программа компилироваться не будет. Конкретный метод выбирается согласно набору фактических параметров, указанных в вызове метода. Типы возвращаемых значений не проверяются при перегрузке методов (т.е. не играют никакой роли). Пример перегрузки методов, не являющихся конструкторами приведен в проекте 10_4.
Когда вызывается перегруженный метод, Java ищет соответствие между аргументами вызова метода и его формальными параметрами. Однако, это соответствие не всегда может быть точным. В некоторых случаях определенную роль в выборе перегруженного метода могут сыграть автоматические преобразования типов Java. Пример приведен в проекте 10_5.
Популярное: Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (273)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |