我閱讀了關於佈局的android開發人員文章「每個ViewGroup類都實現了一個擴展ViewGroup.LayoutParams的嵌套類。」ViewGroup類如何實現嵌套類?
這怎麼可能?我以爲android是基於java的。另外,當我查看ViewGroup類時,它實現了ViewParent和ViewManager接口。它的聲明中沒有類實現。
我閱讀了關於佈局的android開發人員文章「每個ViewGroup類都實現了一個擴展ViewGroup.LayoutParams的嵌套類。」ViewGroup類如何實現嵌套類?
這怎麼可能?我以爲android是基於java的。另外,當我查看ViewGroup類時,它實現了ViewParent和ViewManager接口。它的聲明中沒有類實現。
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嵌套類。」手段。
換句話說,當他們說「實施」他們並不意味着它像關鍵字工具? – Shisui
是的,他們是用文字,英文的方式表達的:-) – Kelevandos
嵌套類是定義_inside_另一個類的類。這不是多重繼承,如果這就是你的想法。看一個例子['FrameLayout.LayoutParams'](https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/widget/FrameLayout.java#419)。 –