Ich bin sicher, dass diejenigen, die es benutzen, es oft vergessen, wenn sie versuchen, es zu benutzen. Lassen Sie uns diesmal den Unterschied zwischen abstrakten Klassen und Schnittstellen verstehen.
Erstens beginnt die abstrakte Klasse mit nichts. Eine abstrakte Klasse ist einfach eine [unvollendete Klasse]. → Ich habe eine [unvollendete Methode].
Die abstrakte Klasse ist Alleine spielt nicht die Rolle der Klasse, Da eine neue Klasse erstellt wird, hat sie eine wichtige Bedeutung als übergeordnete Klasse (Superklasse), die zu einer Basisklasse wird.
Ich habe ein Beispiel vorbereitet. Die Größe der Figur ist ein Beispiel, nach dem man fragen sollte. Eine abstrakte Klasse namens Shape definiert nur die abstrakte Funktion zum Ermitteln der Größe einer Figur. Von nun an definiert die Unterklasse, wie sie implementiert werden soll.
abstract class Shape {
abstract void draw(double a, double b);
}
class Circle extends Shape {
void draw(double r1, double r2) {
System.out.println("Circle : " + (3.14 * r1 * r2));
}
class Rectangle extends Shape {
void draw(double h, double v) {
System.out.println("Rectangle : " + (h * v));
}
class Triangle extends Shape {
void draw(double a, double h) {
System.out.println("Triangle : " + (a * h / 2));
}
public class AbstractTest
{
public static void main(String args[]) {
Circle c = new Circle();
c.draw(5.0, 5.0);
Rectangle r = new Rectangle();
r.draw(5.0, 10.0);
Triangle t = new Triangle();
t.draw(5.0, 10.0);
Shape s = new Circle();
s.draw(5.0, 5.0);
}
}
Schnittstellen sind Freunde abstrakter Klassen. Es ist eine Art abstrakte Klasse, aber abstrakter als eine abstrakte Klasse. Verwenden Sie Implementierungen, um die Schnittstelle in der Klasse zu verwenden.
Auch wenn es problematisch ist, gibt es verschiedene Einschränkungen für die Schnittstelle.
TV.java
public interface TV{
public int MAX_VOLUME = 100;
public int MIN_VOLUME = 0;
public void turnOn();
public void turnOff();
public void changeVolume(int volume);
public void changeChannel(int channel);
}
Ich habe TV.java gemacht. Sie können abstrakte Methoden und Konstanten definieren.
LedTV.java
public class LedTV implements TV
{
public void on(){
System.out.println("TV ON");
}
public void off(){
System.out.println("TV OFF");
}
public void volume(int value){
System.out.println(value + "volume Setting.");
}
public void channel(int number){
System.out.println(number + "channel Setting.");
}
}
Test.java
public class Test{
public static void main(String args[]){
TV tv = new LedTV();
tv.on();
tv.volume(50);
tv.channel(6);
tv.off();
}
}
Wenn Sie ein LcdTV erstellt haben, das eine TV-Schnittstelle implementiert, Selbst wenn nur der neue LedTV-Teil in neuen LcdTV geändert wird, kann das Programm auf die gleiche Weise arbeiten.
--Abstraktklassen und Schnittstellen haben nur Deklarationen und keinen Implementierungsinhalt.
Schnittstelle | Abstrakte Klasse |
---|---|
Um das gleiche Verhalten für das Implementierungsobjekt zu gewährleisten | Funktion verwenden und erweitern |
Mehrfachvererbung ist möglich | Mehrfachvererbung ist nicht möglich |
Es sind nur abstrakte Methoden möglich | Allgemeine Methode+Abstrakte Methode möglich |
Recommended Posts