Je le publierai comme une critique de ** Abstract ** et ** Interface **.
Dans le module supérieur, déclarez les méthodes et les variables qui sont généralement implémentées dans le module inférieur et laissez l'implémentation au module inférieur. De plus, les classes abstraites ne peuvent pas être instanciées.
** - Avantages de l'abstraction **
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;
}
//Déclarez une méthode commune et laissez la mise en œuvre au module inférieur
public abstract void talk();
//Méthode qui ne fait rien
public void tmp(){}
}
Japanese.java
public class Japanese extends Human{
public Japanese(String name){
super(name);
}
@Override
public void talk(){
System.out.println("Bonjour");
}
}
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");
//Erreur de compilation car l'instance ne peut pas être créée
Japanese jp = new Japanese("Yamada Taro");
jp.talk(); //Bonjour
American en = new American("TaroYamada");
en.talk(); //Hello
}
}
Dans l'interface, vous pouvez déclarer une méthode à implémenter en commun comme dans l'abstraction, et laisser l'implémentation à la classe qui hérite de l'interface. Cependant, les champs sont traités différemment des classes abstraites.
** Fonctionnalités de l'interface **
Fondamentalement, il n'est pas permis d'implémenter des champs dans l'interface, mais seuls les champs avec ** public static final ** peuvent être déclarés, et il est automatiquement ajouté lorsque la déclaration de variable est lancée à partir du nom du type dans l'interface. Sera fait. Puisqu'il a un modificateur ** final ** qui ne peut pas être réaffecté, il doit être initialisé en même temps que la déclaration de variable.
Concernant les méthodes, les méthodes qui peuvent être déclarées dans l'interface sont limitées à celles qui sont ** public ** et ** abstract **, et sont automatiquement ajoutées lorsqu'elles sont déclarées à partir du type de retour.
Creature.java
public interface Creature{
//public static final double PI = 3.14;
double PI = 3.14; //Elle devient automatiquement une variable finale statique publique.
//public abstract void breath();
void breath(); //Cela devient automatiquement une méthode abstraite publique.
}
Mon impression honnête est qu'il est difficile de bénéficier des avantages parce que j'ai peu d'expérience en développement avec l'héritage.
Recommended Posts