Je suis sûr que ceux qui l'utilisent l'oublient souvent lorsqu'ils essaient de l'utiliser. Cette fois, comprenons la différence entre les classes abstraites et les interfaces.
Premièrement, la classe abstraite commence par rien. Une classe abstraite est simplement une [classe inachevée]. → J'ai une [Méthode inachevée].
La classe abstraite est Seul ne joue pas le rôle de classe, Puisqu'il crée une nouvelle classe, il a une signification importante en tant que classe parent (Super Class) qui devient une classe de base.
J'ai préparé un exemple. La taille de la figure est un exemple à demander. Une classe abstraite appelée Shape définit uniquement la fonction abstraite de Finding the size of a figure. A partir de maintenant, la sous-classe définit comment l'implémenter.
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);
}
}
Les interfaces sont des amis des classes abstraites. C'est une sorte de classe abstraite, mais c'est plus abstrait qu'une classe abstraite. Utilisez des outils pour utiliser l'interface dans la classe.
En outre, bien que cela soit gênant, il existe diverses restrictions sur l'interface. --Toutes les variables membres doivent être publiques static final. (Peut être omis)
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);
}
J'ai créé TV.java. Vous pouvez définir des méthodes abstraites et des constantes.
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();
}
}
Si vous avez créé un LcdTV qui implémente une interface TV, Même si seule la nouvelle partie LedTV est remplacée par la nouvelle LcdTV, le programme peut fonctionner de la même manière.
interface | Classe abstraite |
---|---|
Pour garantir le même comportement pour l'objet d'implémentation | Pour utiliser et étendre la fonction |
L'héritage multiple est possible | L'héritage multiple n'est pas possible |
Seules les méthodes abstraites sont possibles | Méthode générale+Méthode abstraite possible |
Recommended Posts