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

    1)内部类——一个外部内的内部定义一个类。

    2)内部类可以是静态static 也可以是public default protected 和 private 修饰

    注意:内部类只是一种编译的概念,编译完成之后与外部内一样,是两个不同的类。

    3)分类:成员内部类、局部内部类、嵌套内部类、匿名内部类

    成员内部类:作为外部类的成员,可以访问外部类的成员和方法,即使是private的。

      外部类访问内部类的成员是,需由内部类对象来访问。

      注意:成员内部类不能含有static的变量和方法。因为成员内部类需要先创建了外部类,才能创建它自己的

      在成员内部类要引用外部类对象时,使用outer.this来表示外部类对象;

      而需要创建内部类对象,可以使用outer.inner  obj = outerobj.new inner();

    1. public class Outer { 
    2.     public static void main(String[] args) { 
    3.         Outer outer = new Outer(); 
    4.         Outer.Inner inner = outer.new Inner(); 
    5.         inner.print("Outer.new"); 
    6.  
    7.         inner = outer.getInner(); 
    8.         inner.print("Outer.get"); 
    9.     } 
    10.  
    11.     // 个人推荐使用getxxx()来获取成员内部类,尤其是该内部类的构造函数无参数时 
    12.     public Inner getInner() { 
    13.         return new Inner(); 
    14.     } 
    15.  
    16.     public class Inner { 
    17.         public void print(String str) { 
    18.             System.out.println(str); 
    19.         } 
    20.     } 
    21. }

    局部内部类:是指内部类定义在方法和作用域内。Thinking in Java给了这么两个例子:定义在方法内:

    1. public class Parcel4 { 
    2.     public Destination destination(String s) { 
    3.         class PDestination implements Destination { 
    4.             private String label; 
    5.  
    6.             private PDestination(String whereTo) { 
    7.                 label = whereTo; 
    8.             } 
    9.  
    10.             public String readLabel() { 
    11.                 return label; 
    12.             } 
    13.         } 
    14.         return new PDestination(s); 
    15.     } 
    16.  
    17.     public static void main(String[] args) { 
    18.         Parcel4 p = new Parcel4(); 
    19.         Destination d = p.destination("Tasmania"); 
    20.     } 
    21. }
    1. public class Parcel5 { 
    2.     private void internalTracking(boolean b) { 
    3.         if (b) { 
    4.             class TrackingSlip { 
    5.                 private String id; 
    6.                 TrackingSlip(String s) { 
    7.                     id = s; 
    8.                 } 
    9.                 String getSlip() { 
    10.                     return id; 
    11.                 } 
    12.             } 
    13.             TrackingSlip ts = new TrackingSlip("slip"); 
    14.             String s = ts.getSlip(); 
    15.         } 
    16.     } 
    17.  
    18.     public void track() { 
    19.         internalTracking(true); 
    20.     } 
    21.  
    22.     public static void main(String[] args) { 
    23.         Parcel5 p = new Parcel5(); 
    24.         p.track(); 
    25.     } 
    26. }

     局部内部类也像别的类一样进行编译,但只是作用域不同而已,只在该方法或条件的作用域内才能使用,退出这些作用域后无法引用的。

    嵌套内部类:嵌套内部类,就是修饰为static的内部类。声明为static的内部类,不需要内部类对象和外部类对象之间的联系,就是说我们可以直接引用outer.inner,即不需要创建外部类,也不需要创建内部类。嵌套类和普通的内部类还有一个区别:普通内部类不能有static数据和static属性,也不能包含嵌套类,但嵌套类可以。而嵌套类不能声明为private,一般声明为public,方便调用。

    匿名内部类:

     new 父类构造器(参数列表)|实现接口()
     {
      //匿名内部类的类体部分
     }

    从上面定义可以看出,匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口。
     关于匿名内部类还有如下两条规则:
     1)匿名内部类不能是抽象类,因为系统在创建匿名内部类的时候,会立即创建内部类的对象。因此不允许将匿名内部类
     定义成抽象类。
     2)匿名内部类不等定义构造器,因为匿名内部类没有类名,所以无法定义构造器,但匿名内部类可以定义实例初始化块,

  • 相关阅读:
    NodeJs
    xml_MathML的基本知识点__这东西要自己实践最好
    嘻哈帮天通苑_poppin——张锋
    html5_canvas-记忆力卡片游戏
    baidu时光轴_使用window.scroll实现的
    my_poppin_and_me
    chrom_input_click
    Get filename from URL using Javascript
    UBB编辑器
    What is the best Java email address validation method?
  • 原文地址:https://www.cnblogs.com/richelle009/p/4456473.html
Copyright © 2011-2022 走看看