Maison >Java >javaDidacticiel >Explication détaillée des instances de classe abstraite en Java
Classe abstraite :
1. La classe elle-même doit être déclarée comme abstraite.
2. En plus des méthodes abstraites, les classes abstraites peuvent également contenir des données concrètes et des méthodes spécifiques
3. Deux options pour étendre les classes abstraites (l'implémentation spécifique des méthodes abstraites est dans les sous-classes) :
A. Si une classe abstraite définit certaines classes abstraites ou ne définit pas de méthodes de classe abstraite, alors la sous-classe doit également être marquée comme classe abstraite.
B. Définir toutes les méthodes abstraites pour que la sous-classe ne soit pas abstraite
4. Elle ne peut pas être instanciée directement, mais peut être utilisée indirectement
5. Si une classe To héritez d'une classe abstraite, vous devez implémenter la méthode abstraite déclarée dans la classe abstraite
Sinon, vous devez vous déclarer comme classe abstraite (cela peut être une question)
Parlons des nouvelles fonctionnalités des interfaces dans JDK8 :
Les interfaces ne peuvent plus utiliser uniquement des méthodes abstraites, vous pouvez ajouter des méthodes spécifiques, qui peuvent être statiques ou non. -static Oui, le mot clé defualt doit être utilisé devant les méthodes non statiques.
Les méthodes statiques ne peuvent être référencées que par des sockets, et les méthodes non statiques ne peuvent être référencées que par des objets instanciés par la classe d'implémentation. Par conséquent, lorsque les noms de méthodes statiques de deux interfaces sont identiques, il n'y aura aucun problème et elles ne pourront être référencées que par le nom de classe de l'interface.. Des problèmes surviendront avec les méthodes non statiques, car l'objet ne sait pas quelle méthode d'interface utiliser, ce qui entraînera un échec de compilation.
Ce qui suit est une démonstration de code
package 面向对象;//JDK8的接口新特性。interface A {public abstract void hehe();//传统抽象方法public static void haha()//静态方法 { System.out.println("haha"); }public default void lala() { System.out.println("lala");//非静态要加关键字default } }public class Test implements A {public static void main(String[] args)//因为不是抽象的所以可以重写也可以直接使用。 { A.haha();//不能被Test调用new Test().lala();//非静态要创建实例使用 } }
La magie est là sont des méthodes abstraites Oui, la sous-classe ne remplace pas la méthode abstraite et la machine virtuelle ne signale pas d'erreur, indiquant que l'interface n'a pas besoin d'écrire la méthode abstraite par défaut.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!