Метод Constructor в Java I Перегрузка Constructor
Источник: Objectorientedprogramming77 Что такое Constructor? Это особый тип метода, имя которого совпадает с именем класса, который определяет, как объект инициализируется при его создании. Как и другие методы, мы также можем определить метод Constructor в нашей Java-программе, но, в отличие от других методов, мы не можем вызвать Constructor напрямую; Java вызывает конструктор автоматически при создании объекта. Когда мы используем ключевое слово new для создания объекта класса, Java делает три вещи:- Выделяет память для объекта.
- Инициализируйте эту переменную экземпляра объекта с их начальным значением или значением по умолчанию.
- Вызывает конструктор Method класса.
Базовый Constructor
По определению Constructor выглядит как обычный метод с двумя основными отличиями.- Constructor и имя класса всегда одинаковы.
- У него нет возвращаемого типа
class Person
{
String name;
int age;
Person (String n, int a)
{
name = n;
age = a;
}
void printPerson ()
{
System.out.print("Hi, I am " +name);
System.out.println(" I am "+ age + " years old.");
}
public static void main(String args[])
{
Person p;
p = new Person ("Ajab", 20);
p.printPerson();
p = new Person ("Rizwan", 30);
p.printPerson();
Получаем вывод:
Hi, I am Ajab. I am 20 years old.
Hi, I am Rizwan. I am 30 years old
Перегрузка Constructor
Как и другие методы, Constructor также может принимать различное количество и типы параметров, что позволяет создавать объекты с заданными свойствами или чтобы Constructor мог вычислять свойства на основе различных типов ввода. Например, класс MyRectone в данной таблице создает конструктор MyRectone и передает другой параметр вместо создания разных методов для данных аргументов.
class MyRectone
{
int x1 = 0;
int y1 = 0;
int x2 = 0;
int y2 = 0;
MyRectone ( int x1, int x2, int x2, int y2)
{
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}
MyRectone (Point topLeft, Point bottomRight)
{
x1 = topLeft.x;
y1 = topLeft.y;
x2 = bottomRight.x;
y2 = bottomRight.y;
}
MyRectone ( Point topLeft, int w, int h)
{
x1 = topLeft.x;
y1 = top left.y;
x2 = ( x1 + w);
y2 = (y1 + h);
}
void printRect ()
{
System.out.print ("MyRectone: <" + x1 + ", " + y1);
system.out.println (", " + x2 + " ,"+ y2 + ">");
}
public static void main (String args [] )
{
MyRectone rect;
System.out.println ("Calling MyRectone with coordinates 35,35 70,70");
rect = new MyRectone (35,35,70,70);
rect.printRect();
System.out.println ("Calling MyRectone with coordinates (15,15) (30,30)");
rect = new MyRectone (15,15,30,30);
rect.printRect();
System.out.print (" Calling buildRect w/1 point (10,10),");
System.out.println ("width (50) and height (50)");
rect = new MyRectone ( new Point (10,10), 50, 50);
rect.printRect();
Вывод:
Calling MyRectone with coordinates 35,35 70,70:
MyRectone: <35,35,70,70>
Calling buildRect w/1 points (15,15), (30,30):
MyRectone: <15,15,30,30>
Calling buildRect w/1 point (10,10), width (50) and height (50):
MyRectone:<10,10,50,50>
Вызов другого Constructor
Какой-либо конструктор может быть надмножеством другого конструктора, определенного в вашем классе; то есть, они могут вести себя так же плюс немного больше. Вместо того, чтобы дублировать идентичное поведение в нескольких методах конструктора в нашем классе, имеет смысл иметь возможность просто вызвать этот первый конструктор из тела второго конструктора. Java предоставляет для этого специальный синтаксис. Чтобы вызвать конструктор, определенный в текущем классе, используйте эту форму:
this (arg1, arg2, arg3… ..);
Аргументами this, конечно же, являются аргументы конструктора.
Абстрактные классы и интерфейсы Java
Источник: Dev.to Абстрактный класс — это класс, который имеет некоторые методы без полного определения и имеет модификатор abstract.- Вы не можете создать объект с помощью конструктора абстрактного класса.
- Вы можете использовать абстрактный класс в качестве базового для определения производного класса.
- В абстрактном классе существует по крайней мере один абстрактный метод.
- Абстрактный метод: имеет заголовок, как и обычный метод, но без тела, и для него требуется модификатор abstract и точка с запятой.
- Абстрактный метод не может быть частным.
- Абстрактный класс может быть типом.
public abstract class Example{
private String data1;
private double data2;
public abstract double getPay();
}
Интерфейс: определяет набор методов, которые должен иметь любой класс, реализующий этот интерфейс.- Интерфейс — это тип.
- Он содержит заголовки методов без определения и без переменных экземпляра:
public interface Interface1{
public void method1();
public int method2();
}
Чтобы реализовать интерфейс, класс должен выполнять две вещи:- Включать implements InterfaceName.
- Класс должен реализовывать все заголовки методов, перечисленные в интерфейсе.
public class Implementer implements Interface1 {
@Override
public void method1() {
//definition
}
@Override
public int method2() {
//definition
}
}
- Заголовки методов объявлены public.
- Абстрактный класс также может реализовывать интерфейс, этот класс дает определения для некоторых заголовков методов в интерфейсе.
- Интерфейсы Java также могут содержать constant, например:
public interface Constant {
public static final int JANUARY = 1, FEBRUARY = 2, MARCH = 3;
}
- Любой класс, реализующий интерфейс Constant, будет автоматически иметь эти константы, например:
public class Constants implements Constant {
public static void main(String[] args) {
System.out.println(JANUARY);
}
}
- Вы можете смешивать использование интерфейсов, включая константы и заголовки методов в один интерфейс.
- В Java не поддерживается множественное наследование, поэтому класс может расширять только один базовый класс. Однако, используя интерфейсы, класс может реализовывать несколько интерфейсов:
public class Implementer implements Interface1, Interface2, .. InterfaceN{
}
- Причина, по которой класс Java может расширять только один базовый класс, заключается в том, что если Java допускает два базовых класса, эти два класса могут иметь один и тот же заголовок метода с различным определением, что приведет к несогласованности.
- Два интерфейса могут быть несовместимыми, если определить две константы с одним и тем же именем и разными значениями:
public interface Interface1{
public static final int ANSWEAR = 0;
}
public interface Interface1{
public static final int ANSWEAR = 3;
}
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ