zoukankan      html  css  js  c++  java
  • Java 内部类

    Java的内部类包括四种类型:

    Static member classes

    Member classes

    Local classes

    Anonymous classes

    1. Static member class

    Static member class是类的一个静态成员,它只能访问上层类中的静态成员和静态方法

    第一:Static member class访问Outer class的成员变量或方法的时候,必须先new 一个Outer的对象,而无法通过Outer.this.xxx或Outer.this.xxx()来访问

    2. Member class

    类似于Static member class,它也是类的一个成员,但是它跟实例关联的,所以能访问所有的方法和成员变量,甚至是父类的this指针

    类前面的修饰符有public > protected > package > private 和其它是一样的。

    在成员内部类中要注意两点,

    第一:成员内部类中不能存在任何static的变量和方法;

    第二:成员内部类是依附于外围类的,所以只有先创建了外围类才能够创建内部类。所以外部类的静态方法中要访问内部类的方法要先new Outer对象再new Inner对象才能访问

    第三:在Inner类中声明的变量或方法如果跟Outer类重名或函数签名一致的话,是会覆盖外部类的变量或方法。此时必须通过Outer.this.xxx 或Outer.this.xxx() 来访问外部类的变量或方法

     1 package edu.sjtu.se.dclab.code;
     2 
     3 public class Outer {
     4     
     5     private String a;
     6     private String c;
     7     private static String b = "Outer static String";
     8     
     9     public static void staticPrint(){
    10         System.out.println("Outer static method: staticPrint");
    11     }
    12     
    13     public void print(){
    14         System.out.println("Outer class method : print");
    15     }
    16     
    17     public Outer() {
    18         a = "Outer String a";
    19         c = "Outer String c";
    20     }
    21     
    22     class Inner{
    23         private String a;
    24         //private static String b= "xx";   //不能创建静态变量
    25         
    26         Inner(){
    27             a = "Inner String a";
    28         }
    29         
    30         public void print(){   //覆盖外部类的方法
    31             System.out.println("Inner class method : print");
    32         }
    33         
    34         public void test(){
    35             //Access Outer Member
    36             System.out.println("Outer.this.c = " + Outer.this.c);   //访问外部类的成员
    37             //Access Outer Member
    38             System.out.println("c = " + c);   //不重名,访问外部类的成员
    39             //Access Outer Static Member
    40             System.out.println("Outer.b = " + Outer.b);  //访问外部类的静态成员
    41             //Access Inner Member
    42             System.out.println("a = " + a);   //重名,默认访问内部类的成员
    43             //Access Outer static method
    44             staticPrint();   //访问外部类的静态方法
    45             //Access Inner method
    46             print();   //重名,访问内部类的方法
    47             //Access Outer method  
    48             Outer.this.print();  //重名,访问外部类的方法
    49         }
    50     }
    51     
    52     static class StaticInner{
    53         public void test(){
    54             System.out.println(new Outer().a);   //在静态内部类中,必须先new一个外部类的对象
    55             staticPrint();   //直接访问外部类的静态方法
    56         }
    57     }
    58     
    59     public Inner getInner(){
    60         return new Inner();
    61     }
    62     
    63     public StaticInner getStaticInner(){
    64         return new StaticInner();
    65     }
    66     
    67     public static void staticTest(){
    68         new Outer().getInner().print();   //外部类静态方法要访问内部类的方法,要先创建外部类对象,再获取内部类的对象,再调用方法
    69     }
    70 
    71 }

    3. Local class 

    Local class是只在某个code block中可见的类,类似于方法中定义的变量

    注意local class只能访问code block中是final的变量(内部的原因还不太懂)

    4. Anonymous class

    Anonymous class是一种没有名字的Local Class

  • 相关阅读:
    iPhone/iOS图片相关(读取、保存、绘制、其它相关)
    NData转化
    UIScrollView小记
    ios学习--结合UIImageView实现图片的移动和缩放
    iphone UIScrollView缩放
    在scrollview中双击定点放大的代码
    IOS 程序内部切换语言 的一种方法
    SAP Hybris Discount group,折扣组,折扣记录,用户组几组概念的关联
    Hybris产品主数据的价格折扣维护
    Hybris订单价格的折扣维护
  • 原文地址:https://www.cnblogs.com/longshaohang/p/3936900.html
Copyright © 2011-2022 走看看