User Эллеонора Керри
Эллеонора Керри
41 уровень

Кофе-брейк #107. Метод Constructor в Java I Перегрузка Constructor. Абстрактные классы и интерфейсы Java

Статья из группы Random

Метод Constructor в Java I Перегрузка Constructor

Источник: Objectorientedprogramming77 Что такое Constructor? Это особый тип метода, имя которого совпадает с именем класса, который определяет, как объект инициализируется при его создании. Кофе-брейк #107. Метод Constructor в Java I Перегрузка Constructor. Абстрактные классы и интерфейсы Java - 1Как и другие методы, мы также можем определить метод Constructor в нашей Java-программе, но, в отличие от других методов, мы не можем вызвать Constructor напрямую; Java вызывает конструктор автоматически при создании объекта. Когда мы используем ключевое слово new для создания объекта класса, Java делает три вещи:
  • Выделяет память для объекта.
  • Инициализируйте эту переменную экземпляра объекта с их начальным значением или значением по умолчанию.
  • Вызывает конструктор Method класса.
Если в классе не определен какой-либо метод Constructor, мы все равно создадим объект этого класса, но мы должны установить переменную экземпляра или вызвать другие методы, которые впоследствии должны инициализировать объект этим объектом. Определяя метод Constructor в наших собственных классах, мы можем установить начальные значения переменной экземпляра, вызвать метод на основе этой переменной или вызвать методы для других объектов или вычислить начальные свойства нашего объекта. Мы также можем перегрузить Constructor, как и обычные методы, для создания объекта, который имеет определенные свойства на основе аргумента, который мы передаем для new.

Базовый Constructor

По определению Constructor выглядит как обычный метод с двумя основными отличиями.
  • Constructor и имя класса всегда одинаковы.
  • У него нет возвращаемого типа
Например, в приведенной ниже таблице показан простой класс Person с конструктором, который инициализирует его переменную экземпляра на основе аргумента new. Класс также включает метод, с помощью которого объект может представить себя, и метод main() для тестирования каждого из этих классов.

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. Кофе-брейк #107. Метод Constructor в Java I Перегрузка Constructor. Абстрактные классы и интерфейсы Java - 2
  • Вы не можете создать объект с помощью конструктора абстрактного класса.
  • Вы можете использовать абстрактный класс в качестве базового для определения производного класса.
  • В абстрактном классе существует по крайней мере один абстрактный метод.
  • Абстрактный метод: имеет заголовок, как и обычный метод, но без тела, и для него требуется модификатор 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;
}
Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Justinian Уровень 41, Mega City One Master
30 декабря 2021

В абстрактном классе существует по крайней мере один абстрактный метод.
Ась? Это ошибка. Модификатор abstract говорит о том, что класс МОЖЕТ содержать абстрактные метдоы. А может и не содержать. Может имелось ввиду другое, но сформулировано точно неверно.
Павел Уровень 11, Россия
30 декабря 2021
В последнем листинге скорее всего имелось ввиду Interface2