Maison  >  Article  >  Java  >  Comment comprendre l'abstraction en Java

Comment comprendre l'abstraction en Java

(*-*)浩
(*-*)浩original
2019-05-21 15:02:493623parcourir

Comment comprendre l'abstraction en Java

Extraire et résumer leurs aspects communs, leurs attributs essentiels et leurs relations à partir de choses spécifiques, et rejeter les aspects, attributs et relations individuels et non essentiels. appelé abstraction.

Classe abstraite :

Une classe qui ne peut pas être instanciée à l'aide de la nouvelle méthode, c'est-à-dire une classe qui n'a pas d'objet instance spécifique, peut n'en dérivez de nouveaux que via la sous-classe des classes abstraites, puis sa sous-classe crée des objets

Méthode abstraite :

La méthode abstraite est une méthode modifiée avec abstract. le retour Le type de données, le nom de la méthode et les paramètres requis n'ont pas de corps de méthode, ce qui signifie que la méthode abstraite doit uniquement être déclarée. Lorsqu'une méthode est une méthode abstraite, cela signifie que cette méthode doit être remplacée par la méthode de la sous-classe. , sinon la méthode de la sous-classe La méthode est toujours abstraite

Caractéristiques des classes abstraites :

A : Les classes abstraites et les méthodes abstraites doivent être modifiées avec le mot-clé abstract ;

B : Il ne peut pas y avoir de méthodes abstraites dans les classes abstraites, mais les classes avec des méthodes abstraites doivent être définies comme des classes abstraites

C : Les classes abstraites ne peuvent pas être instanciées directement ; les sous-classes (sous-classes après le remplacement des méthodes) Class) sont instanciées de manière polymorphe);

  • Ce n'est pas concret

  • Les classes abstraites ont des constructeurs ; pour l'accès à la sous-classe Initialisation des données de la classe parent ;

D : Sous-classe de la classe abstraite

  • Si vous ne souhaitez pas remplacer les méthodes abstraites, la sous-classe doit être une classe abstraite

  • Pour devenir une classe concrète, toutes les méthodes abstraites doivent être réécrites

Un exemple de ; une classe abstraite est donnée ci-dessous :

public class AbstractDemo {
    public static void main(String[] args) {
        //Tree t = new Tree();//抽象的子类不能实例化;Error!
        Grass g = new Grass();//非抽象类的子类实例化
        g.grow();
        System.out.println("-------------");
        Plant p = new Grass();//多态的方式
        p.grow();
    }
}
abstract class Plant{
    public abstract void grow();
}

/*
 * 1.子类是抽象类;
 */
abstract class Tree extends Plant{
    Tree(){
        System.out.println("tree");
    }
}

/*
 * 2.子类不是抽象类,则必须重写所有抽象方法;
 */
class Grass extends Plant{
    Grass(){
        System.out.println("grass");
    }
    public void grow(){
        System.out.println("grass growing");
    }
}

Caractéristiques des membres des classes abstraites :

A : Les variables membres

peuvent être soit des variables ou des constantes ;

B : la méthode constructeur

est utilisée pour l'initialisation de l'accès de la sous-classe aux données de la classe parent

C : la méthode membre

peut être soit ; abstrait ou Peut être non abstrait ;

Caractéristiques de la méthode membre de la classe abstraite :

A : La méthode abstraite

force les sous-classes à faire des choses ; >

B : Méthode non abstraite

Héritage de sous-classe pour améliorer la réutilisabilité du code

Ce qui suit est un exemple de membre d'une classe abstraite :

public class AbstractMember {
    public static void main(String[] args){
        
        Phone p = new Vivo();    //这里是多态;(用来实例化抽象类)
        p.height = 1460;        //1600 -> 1460
        System.out.println(p.height);
        System.out.println(p.width);
        System.out.println("-----------");
        p.call();        //vivo call
        p.method();        //vivo method
        
        
        
    }
}

abstract class Phone{
    public int height = 1600;
    public final int width = 960;
    public Phone(){}
    public Phone(String name,int count){}
    /*成员方法*/
    public abstract void call();//抽象成员方法;
    public void method(){        //非抽象成员方法;
        System.out.println("phone method");
    }
    
}
//非抽象子类,重写抽象父类的抽象方法:
class Vivo extends Phone{
    
    public void call(){
        System.out.println("vivo call");
    }
    public void method(){
        System.out.println("vivo method");
    }
    
}
Recommandations d'apprentissage associées :

Tutoriel de base Java

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn