2017-02-21 139 views
-3

我閱讀了關於佈局的android開發人員文章「每個ViewGroup類都實現了一個擴展ViewGroup.LayoutParams的嵌套類。」ViewGroup類如何實現嵌套類?

這怎麼可能?我以爲android是基於java的。另外,當我查看ViewGroup類時,它實現了ViewParent和ViewManager接口。它的聲明中沒有類實現。

+1

嵌套類是定義_inside_另一個類的類。這不是多重繼承,如果這就是你的想法。看一個例子['FrameLayout.LayoutParams'](https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/widget/FrameLayout.java#419)。 –

回答

0
  1. 嵌套類在Java中很正常的事情

Java編程語言允許你把 另一個類定義一個類。這樣的類稱爲嵌套類,並且是這裏所示 : 類{在OuterClass ... 類 {NestedClass ... }}

術語:嵌套類分爲兩類:靜態 和非靜態的。聲明爲靜態的嵌套類稱爲 靜態嵌套類。非靜態嵌套類被稱爲內部類 類。

類{在OuterClass ... 靜態類StaticNestedClass { ... } 類{將InnerClass ... }}

嵌套類是它包圍類的成員。非靜態嵌套的 類(內部類)可以訪問封閉的 類的其他成員,即使它們被聲明爲私有。靜態嵌套類別不能 有權訪問封閉類的其他成員。作爲 的成員OuterClass,嵌套類可以聲明爲private,public, protected,或者package爲private。 (回憶一下外類只能 聲明爲公共或包專用。)

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

  • 因此,我認爲這句話「每一個ViewGroup類實現嵌套類它擴展了ViewGroup.LayoutParams。「很簡單。我試圖對班級結構進行說明。 這將是一個ViewGroup(簡體):

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

    你已經可以看到,一個ViewGroup是一個抽象類,所以不能不能被實例化,所以它服務於其他類作爲一個超類。 因此,例如子類CoordinatorLayout是這樣的(簡化):

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

    和MarginLayoutParams被定義爲

    public static class ViewGroup.MarginLayoutParams extends ViewGroup.LayoutParams{} 
    
  • 所以,在這個例子中

    類LayoutParams擴展ViewGroup.MarginLayoutParams

    公共抽象類的ViewGroup

    擴展視圖實現ViewParent, ViewManager

    是那句話 「每一個ViewGroup類實現擴展ViewGroup.LayoutParams嵌套類。」手段。

    +0

    換句話說,當他們說「實施」他們並不意味着它像關鍵字工具? – Shisui

    +1

    是的,他們是用文字,英文的方式表達的:-) – Kelevandos