Maison > Java > Javacommencer > Explication détaillée des classes internes Java

Explication détaillée des classes internes Java

王林
Libérer: 2020-04-23 16:25:40
avant
2501 Les gens l'ont consulté

Explication détaillée des classes internes Java

Classes internes ordinaires

Il y a deux points principaux qui doivent être maîtrisés dans les classes internes ordinaires

tient le parent référence de classe, donc Variables et méthodes pouvant accéder à tous les droits d'accès de la classe parent

Comment les classes internes sont créées en dehors de la classe parent

public class Main{
    public static void main(String args[]){
        Outer outer = new Outer();
        //外部类外部创建内部类
        Outer.Inner inner = outer.new Inner();
        inner.method();
    }
}
class Outer{
    private String value = "OuterValue";
    class Inner{
        public void method(){
            //持有父类引用,可以访问父类private变量value
            System.out.println(value);
        }
        //利用.this关键字,可以返回父类对象引用
        public Outer outerObject(){
            return Outer.this;
        }
    }
}
Copier après la connexion

(Tutoriel recommandé : Programme de démarrage Java )

Classe interne de méthode

Classe interne

définie directement dans la méthode a les mêmes autorisations que la méthode et peut accéder aux autres méthodes et les variables membres de la classe externe.

peut accéder aux paramètres de cette méthode. Après la version 1.8, les paramètres n'ont pas besoin d'être définis sur final

a les mêmes autorisations que les variables locales de la méthode et peut accéder aux variables locales. défini devant lui

La classe interne de la méthode n'est accessible que dans la portée de la méthode

public class Main{
    public static void main(String args[]){
        Outer outer = new Outer();
        outer.outerMethod("param");
    }
}
class Outer{
    public void outerMethod(String value){
        class Inner {
            public void innerMethod(){
                //可以访问方法参数
                //1.8以后,内部类访问的方法参数不必设置为final
                System.out.println(value);
            }
        }
        new Inner().innerMethod();
    }
}
Copier après la connexion

Classe interne anonyme

La classe interne anonyme est en fait un point clé, et c'est aussi un point de connaissance que nous utilisons souvent .

Par exemple, créer un nouveau fil

public class Main{
    public static void main(String args[]){
        Thread a = new Thread(new Runnable(){
            @Override
            public void run(){
                System.out.println("thread a is running;");
            }
        });
        a.start();
    }
}
Copier après la connexion

Le code ci-dessus signifie créer un objet de classe anonyme qui implémente l'interface Runnable, ce qui est équivalent au code suivant en raison de la commodité d'écriture. , nous utilisons souvent le deuxième type

public class Main{
    public static void main(String args[]){
        Thread a = new Thread(new RunnableImp());
        a.start();
    }
    static class RunnableImp implements Runnable{
        @Override
        public void run(){
            System.out.println("thread a is running;");
        }
    }
}
Copier après la connexion

Classe interne statique

Rappelez-vous les deux points suivants

Pour créer un objet de classe interne statique, vous faites pas besoin d'un objet de la classe externe (les classes internes ordinaires nécessitent)

Impossible d'accéder aux méthodes de classe externe non statiques ou aux variables membres à partir d'une classe interne statique

public class Main{
    Outer.Inner inner = new Outer.Inner();
}

class Outer{
    private String ordValue;
    private static String staValue;
    static class Inner{
        {
            System.out.println(staValue);

            //这句编译通不过
            //System.out.println(ordValue);
        }
    }
}
Copier après la connexion

Recommandations de didacticiels vidéo associées : vidéo 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!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal