2017-02-21 2 views
-3

Ich las auf dem Android-Entwickler Artikel zu Layouts "Jede ViewGroup-Klasse implementiert eine geschachtelte Klasse, die ViewGroup.LayoutParams erweitert."Wie implementieren ViewGroup-Klassen geschachtelte Klassen?

Wie ist das möglich? Ich dachte, Android basiert auf Java. Wenn ich mir die ViewGroup-Klasse ansehe, implementiert sie außerdem die Schnittstellen ViewParent und ViewManager. In seiner Deklaration gibt es keine Klassenimplementierungen.

+1

Eine verschachtelte Klasse ist eine Klasse, die _inside_ eine andere Klasse definiert. Es ist keine Mehrfachvererbung, wenn Sie das denken. Betrachten Sie ['FrameLayout.LayoutParams'] (https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/widget/FrameLayout.java#419) als Beispiel. –

Antwort

0
  1. Verschachtelte Klassen sind normale Sache in Java

Die Programmiersprache Java eine Klasse innerhalb eine andere Klasse zu definieren. Eine solche Klasse eine verschachtelte Klasse genannt und ist hier dargestellt: Klasse OuterClass { ... Klasse NestedClass { ... }}

Terminologie: Verschachtelte Klassen in zwei Kategorien unterteilt werden: static und nicht statisch. Geschachtelte Klassen, die als statisch deklariert sind, heißen statische verschachtelte Klassen. Nicht statische verschachtelte Klassen heißen innere Klassen.

Klasse OuterClass { ... statische Klasse StaticNestedClass { } ... Klasse Innerclass { ... }}

Eine verschachtelte Klasse ist ein Mitglied seiner umgebenden Klasse. Nicht statische verschachtelte Klassen (innere Klassen) haben Zugriff auf andere Mitglieder der umschließenden Klasse , auch wenn sie als privat deklariert sind. Statisch verschachtelte Klassen haben keinen Zugriff auf andere Member der umschließenden Klasse. Als Mitglied der OuterClass kann eine verschachtelte Klasse als privat, öffentlich, geschützt oder Paket privat deklariert werden. (Recall, dass äußere Klassen können nur public deklariert oder private verpacken.)

https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

  1. Also ich denke, dieser Satz „Jede Viewgroup-Klasse eine verschachtelte Klasse implementiert das erweitert ViewGroup.LayoutParams. " ist geradeaus. Ich versuche, die Klassenstruktur zu illustrieren. Dies würde die Viewgroup sein (vereinfacht):

    public abstract class ViewGroup extends View implements ViewParent, ViewManager { 
    
    //... fields 
    //... constructors 
    //... and methods 
    
        // The nested class 
        public static class LayoutParams{ 
         //... 
        } 
    
    } 
    

    Sie können bereits sehen, dass Viewgroup ist eine abstrakte Klasse, so kann es nicht Sie können nicht instanziert und so dient es auch für andere Klasse als übergeordnete Klasse. So zum Beispiel wie folgt aus der Unterklasse CoordinatorLayout aussehen würde (vereinfacht):

    public class CoordinatorLayout extends ViewGroup implements NestedScrollingParent{ 
    
    //... fields 
    //... constructors 
    //... and methods 
    
        // The nested class 
        public static class LayoutParams extends ViewGroup.MarginLayoutParams { 
         //... 
        } 
    } 
    

    und MarginLayoutParams ist definiert als

    public static class ViewGroup.MarginLayoutParams extends ViewGroup.LayoutParams{} 
    

in diesem Beispiel die also Klasse

LayoutParams erweitert ViewGroup.MarginLayoutParams

in

öffentliche abstrakte Klasse Viewgroup erweitert Ansicht implementiert ViewParent, Viewmanager

ist, dass der Satz "Jede Klasse Viewgroup eine verschachtelte Klasse implementiert, die ViewGroup.LayoutParams erstreckt." meint.

+0

Mit anderen Worten, wenn sie "implementieren" sagten, meinten sie nicht, dass das Keyword implementiert wird? – Shisui

+1

Ja, sie meinen es in einer wörtlichen, englischen Sprache :-) – Kelevandos

Verwandte Themen