ViewGroup类如何实现嵌套类?

时间:2017-02-21 22:01:52

标签: java android android-layout android-studio

我在关于布局的android开发者文章中读到“每个ViewGroup类都实现了一个扩展ViewGroup.LayoutParams的嵌套类。”

这怎么可能?我以为android基于java。另外,当我查看ViewGroup类时,它实现了ViewParent和ViewManager接口。它的声明中没有类实现。

1 个答案:

答案 0 :(得分:0)

  1. 嵌套类在java中是正常的东西
  2.   

    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

    1. 所以我认为这句话“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{}
      
    2. 所以,在这个例子中

        

      类LayoutParams扩展了ViewGroup.MarginLayoutParams

        

      公共抽象类ViewGroup extends View实现了ViewParent,   ViewManager

      是句子“Every ViewGroup类实现了一个扩展ViewGroup.LayoutParams的嵌套类。”装置