Metoda konstruktora w Javie I Przeciążenie konstruktora
Źródło: Objectientprogramming77 Co to jest konstruktor ? Jest to specjalny typ metody, którego nazwa jest taka sama jak nazwa klasy, która określa sposób inicjowania obiektu podczas jego tworzenia. Podobnie jak inne metody, możemy również zdefiniować metodę Konstruktora w naszym programie Java, ale w przeciwieństwie do innych metod nie możemy bezpośrednio wywołać Konstruktora ; Java wywołuje konstruktor automatycznie po utworzeniu obiektu. Kiedy używamy słowa kluczowego new do utworzenia obiektu klasy, Java robi trzy rzeczy:- Przydziela pamięć dla obiektu.
- Zainicjuj tę zmienną instancji obiektu jej wartością początkową lub domyślną.
- Wywołuje konstruktora metody klasy.
Podstawowy konstruktor
Z definicji Constructor wygląda jak zwykła metoda z dwiema głównymi różnicami.- Konstruktor i nazwa klasy są zawsze takie same.
- Nie ma typu powrotu
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();
Otrzymujemy dane wyjściowe:
Cześć, jestem Ajab. Mam 20 lat. Cześć, jestem Rizwan. Mam 30 lat
Przeciążenie konstruktora
Podobnie jak inne metody, Constructor może również akceptować różne liczby i typy parametrów, umożliwiając tworzenie obiektów o określonych właściwościach lub umożliwiając Constructorowi obliczanie właściwości na podstawie różnych typów danych wejściowych. Na przykład klasa MyRectone w danej tabeli tworzy konstruktor MyRectone i przekazuje inny parametr zamiast tworzyć różne metody dla podanych argumentów.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();
Wniosek:
Wywołanie MyRectone o współrzędnych 35,35 70,70: MyRectone: <35,35,70,70> Wywołanie buildRect z 1 punktami (15,15), (30,30): MyRectone: <15,15,30,30 > Wywołanie buildRect z 1 punktem (10,10), szerokością (50) i wysokością (50): MyRectone:<10,10,50,50>
Wywołanie innego konstruktora
Konstruktor może być nadzbiorem innego konstruktora zdefiniowanego w Twojej klasie; to znaczy, że mogą zachowywać się tak samo, a nawet trochę więcej. Zamiast powielać identyczne zachowanie w wielu metodach konstruktorów w naszej klasie, rozsądniej jest móc po prostu wywołać pierwszy konstruktor z treści drugiego konstruktora. Java zapewnia do tego specjalną składnię. Aby wywołać konstruktor zdefiniowany w bieżącej klasie, użyj poniższego formularza:this (arg1, arg2, arg3… ..);
Argumenty przemawiające za tym są oczywiście argumentami konstruktora.
Abstrakcyjne klasy i interfejsy Java
Źródło: Dev.to Klasa abstrakcyjna to klasa, która ma pewne metody bez pełnej definicji i ma modyfikator abstrakcyjny .- Nie można utworzyć obiektu przy użyciu konstruktora klasy abstrakcyjnej.
- Możesz użyć klasy abstrakcyjnej jako klasy bazowej do zdefiniowania klasy pochodnej.
- Klasa abstrakcyjna ma co najmniej jedną metodę abstrakcyjną.
- Metoda abstrakcyjna : ma nagłówek jak zwykła metoda, ale bez treści i wymaga modyfikatora abstrakcyjnego oraz średnika.
- Metoda abstrakcyjna nie może być prywatna.
- Klasa abstrakcyjna może być typem.
public abstract class Example{
private String data1;
private double data2;
public abstract double getPay();
}
Interfejs : definiuje zestaw metod, które musi posiadać każda klasa implementująca ten interfejs.
- Interfejs jest typem.
- Zawiera nagłówki metod bez definicji i zmiennych instancji:
public interface Interface1{
public void method1();
public int method2();
}
Aby zaimplementować interfejs, klasa musi wykonać dwie rzeczy:
- Uwzględnij implementacje nazwa_interfejsu .
- Klasa musi implementować wszystkie nagłówki metod wymienione w interfejsie.
public class Implementer implements Interface1 {
@Override
public void method1() {
//definition
}
@Override
public int method2() {
//definition
}
}
- Nagłówki metod są deklarowane jako publiczne .
- Klasa abstrakcyjna może również implementować interfejs. Klasa ta udostępnia definicje niektórych nagłówków metod w interfejsie.
- Interfejsy Java mogą również zawierać stałą , na przykład:
public interface Constant {
public static final int JANUARY = 1, FEBRUARY = 2, MARCH = 3;
}
- Każda klasa implementująca interfejs Constant będzie automatycznie mieć te stałe, na przykład:
public class Constants implements Constant {
public static void main(String[] args) {
System.out.println(JANUARY);
}
}
- Można mieszać interfejsy, włączając stałe i nagłówki metod w jeden interfejs.
- Java nie obsługuje dziedziczenia wielokrotnego, więc klasa może rozszerzać tylko jedną klasę bazową. Jednak korzystając z interfejsów, klasa może implementować wiele interfejsów:
public class Implementer implements Interface1, Interface2, .. InterfaceN{
}
- Powodem, dla którego klasa Java może rozszerzać tylko jedną klasę bazową, jest to, że jeśli Java dopuszcza dwie klasy bazowe, obie klasy mogą mieć ten sam nagłówek metody z inną definicją, co powoduje niespójność.
- Dwa interfejsy mogą być niekompatybilne, jeśli zdefiniujesz dwie stałe o tej samej nazwie i różnych wartościach:
public interface Interface1{
public static final int ANSWEAR = 0;
}
public interface Interface1{
public static final int ANSWEAR = 3;
}
GO TO FULL VERSION