我在关于布局的android开发者文章中读到“每个ViewGroup类都实现了一个扩展ViewGroup.LayoutParams的嵌套类。”
这怎么可能?我以为android基于java。另外,当我查看ViewGroup类时,它实现了ViewParent和ViewManager接口。它的声明中没有类实现。
答案 0 :(得分:0)
Java编程语言允许您在其中定义类 另一堂课。这样的类称为嵌套类,而且是 这里说明: class OuterClass { ... class NestedClass { ... }}
术语:嵌套类分为两类:静态 和非静态的。调用声明为static的嵌套类 静态嵌套类。非静态嵌套类称为内部 类。
class OuterClass { ... static class StaticNestedClass { ... } class InnerClass { ... }}
嵌套类是其封闭类的成员。非静态嵌套 类(内部类)可以访问封闭的其他成员 类,即使它们被宣布为私有。静态嵌套类不会 可以访问封闭类的其他成员。作为会员 在OuterClass中,嵌套类可以声明为private,public, 受保护或包私有。 (回想一下,外类只能是 声明公开或包私有。)
https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
所以我认为这句话“Every 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 extends View实现了ViewParent, ViewManager
是句子“Every ViewGroup类实现了一个扩展ViewGroup.LayoutParams的嵌套类。”装置