Ich werde es als Rezension von ** Abstract ** und ** Interface ** veröffentlichen.
Deklarieren Sie im oberen Modul die Methoden und Variablen, die üblicherweise im unteren Modul implementiert sind, und überlassen Sie die Implementierung dem unteren Modul. Außerdem können abstrahierte Klassen nicht instanziiert werden.
** - Vorteile der Abstraktion ** --Vorbeugung des Vergessens des Überschreibens
Human.java
public abstract class Human{
private String name;
public Human(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
//Deklarieren Sie eine gemeinsame Methode und überlassen Sie die Implementierung dem unteren Modul
public abstract void talk();
//Methode, die nichts tut
public void tmp(){}
}
Japanese.java
public class Japanese extends Human{
public Japanese(String name){
super(name);
}
@Override
public void talk(){
System.out.println("Hallo");
}
}
American.java
public class American extends Human{
public American(String name){
super(name);
}
@Override
public void talk(){
System.out.println("Hello");
}
}
Main.java
public class Main{
public static void main(String[] args){
//Human human = new Human("Yamada Taro");
//Kompilierungsfehler, da keine Instanz erstellt werden kann
Japanese jp = new Japanese("Yamada Taro");
jp.talk(); //Hallo
American en = new American("TaroYamada");
en.talk(); //Hello
}
}
In der Schnittstelle können Sie eine Methode deklarieren, die wie in der Abstraktion gemeinsam implementiert werden soll, und die Implementierung der Klasse überlassen, die die Schnittstelle erbt. Felder werden jedoch anders behandelt als abstrakte Klassen.
** Schnittstellenfunktionen **
Grundsätzlich ist es nicht erlaubt, Felder in der Schnittstelle zu implementieren, sondern es können nur Felder mit ** public static final ** deklariert werden. Diese werden automatisch hinzugefügt, wenn die Variablendeklaration über den Typnamen in der Schnittstelle gestartet wird. Getan werden. Da es einen ** endgültigen ** Modifikator gibt, der nicht neu zugewiesen werden kann, muss er gleichzeitig mit der Variablendeklaration initialisiert werden.
In Bezug auf Methoden sind die Methoden, die in der Schnittstelle deklariert werden können, auf diejenigen beschränkt, die ** öffentlich ** und ** abstrakt ** sind, und werden automatisch hinzugefügt, wenn sie vom Rückgabetyp deklariert werden.
Creature.java
public interface Creature{
//public static final double PI = 3.14;
double PI = 3.14; //Es wird automatisch zu einer öffentlichen statischen Endvariablen.
//public abstract void breath();
void breath(); //Es wird automatisch zu einer öffentlichen abstrakten Methode.
}
Mein ehrlicher Eindruck ist, dass es schwierig ist, von den Vorteilen zu profitieren, da ich wenig Entwicklungserfahrung mit Vererbung habe.
Recommended Posts