JavaRush /Java блог /Random UA /Кава-брейк #107. Метод Constructor Java I Перевантаження ...

Кава-брейк #107. Метод Constructor Java I Перевантаження Constructor. Абстрактні класи та інтерфейси Java

Стаття з групи Random UA

Метод 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 виглядає як звичайний метод із двома основними відмінностями.
  • Конструктор та ім'я класу завжди однакові.
  • У нього немає типу, що повертається
Наприклад, у наведеній нижче таблиці показаний простий клас 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… ..);
Аргументами цього , звичайно ж, є аргументи конструктора.

Абстрактні класи та інтерфейси 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;
}
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ