`
san_yun
  • 浏览: 2652469 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

内部类总结

    博客分类:
  • java
阅读更多
类的成员变量通常可以分为三种
 1.实例成员变量,也就是不带static 修饰符的成员变量
 2.静态成员变量,也就是带static 修饰符的成员变量
 3.局部变量 也就是写在方法内部的成员变量
同样的,内部类也可以分为三种
1.实例内部类,也就是不带static 修饰符的内部类
2.静态内部类,也就是带static 修饰符的内部类
3.局部内部类,也就是写在方法内部的内部类

一.实例内部类的特点:
1.实例内部类的初始化.因为实例内部类自动获取外部类的引用,所有实例内部类的初始化必须写成这样:

java 代码
  1. OuterClass.InnerClass innerClass = new OuterClass().new InnerClass();   

也可以省略掉OuterClass:

 

java 代码
  1. InnerClass innerClass = new OuterClass().new InnerClass();   

 

也可以

java 代码
  1. uterClass outer = new OuterClass();   
  2. InnerClass inner = outer.new InnerClass();  

 

2.每个外部对象都有一个相应的内部类,两个对象之间的内部类里面的属性互不干扰.

java 代码
  1. class OuterClass {   
  2.        
  3.     private class InnerClass {   
  4.            
  5.          String innerWord = "innerWord";   
  6.     }   
  7.     public static void main(String[] args){   
  8.         OuterClass outer = new OuterClass();   
  9.         InnerClass inner = outer.new InnerClass();   
  10.            
  11.         System.out.println(inner.innerWord); //innerWord   
  12.         inner.innerWord="modified innerWord";   
  13.            
  14.         InnerClass inner2 = outer.new InnerClass();   
  15.         System.out.println(inner2.innerWord);   //innerWord   
  16.            
  17.     }   
  18. }   

 

3. JVM会自动使内部类实例引用它的外部类的实例,因此实例内部类自动获得对外部类的引用,它可以访问外部类的所有成员变量.

java 代码
  1. public class OuterClass {   
  2. private String value="Outer value";   
  3. static private String key="Outer key";   
  4.        
  5. class InnerClass {   
  6.         public void tt(){   
  7.             value = "Inner value";   
  8.             key = "Inner  key";   
  9.         }   
  10.     }   
  11.   
  12. }  

 

4.根据jvm的类加载机制(静态成员属于类,实例成员属于对象, 加载静态成员发生在类加载期,而加载实例成员发生在创建对象期),实例内部类是不能拥有静态方法和静态变量.
5.接口和抽象类同样可以拥有内部类,内部类自动拥有他们的实现类

java 代码
  1. abstract class OuterClass {   
  2.     private String value="Outer value";   
  3.     static private String key="Outer key";   
  4.        
  5.     class InnerClass {   
  6.         public  void tt(){   
  7.             value = "11";   
  8.             key = "11";   
  9.         }   
  10.     }   
  11.        
  12.     public void tt(){   
  13.         //error!不能实例化OuterClass();   
  14. //InnerClass innerClass = new OuterClass().new InnerClass();   
  15.     }   
  16.        
  17. }   
  18. class OuterClassImp extends OuterClass{   
  19.     public void tt(){   
  20.         InnerClass innerClass = new OuterClassImp().new InnerClass();   
  21.     }   
  22. }  

6.在直接构造内部类的实例时,JVM会自动使内部类实例引用它的外部类的实例,
比如:

如果另一个外部类继承一个内部类

java 代码
  1. class Sample extends OuterClass.InnerClass{   
  2. }  

 

java 代码
  1. InnerClass innerClass  = new Sampe().  
JVM就无法决定让Sample的实例引用哪个Outer的实例
为了避免这种矛盾,JVM要求Sample的构造函数必须通过参数。传递一个Outer实例的引用,然后在构造方法中调用super语句来建立Sample实例与Outer实例的联系
java 代码
  1. class Sample extends OuterClass.InnerClass{   
  2.     Sample(OuterClass o){   
  3.         o.super();   
  4. }   
  5. }  

 

java 代码
  1. OuterClass out = new OuterClass();   
  2. InnerClass innerClass = out.new Sample();   
分享到:
评论

相关推荐

    java中的匿名内部类总结

    Java 中的匿名内部类总结 Java 中的匿名内部类是一种特殊的内部类,它没有名字,因此也称为匿名类。匿名内部类是一种简洁的编程方式,能够简化代码编写,但它也有一些限制和特点。 匿名内部类的定义 匿名内部类是...

    Java内部类总结

    ### Java内部类总结 在Java编程语言中,内部类是一个重要的概念,它允许开发者在一个类的内部定义另一个类。这种特性极大地增强了代码的封装性和复用性,同时也为解决特定问题提供了灵活的方法。本文将围绕Java内部...

    java内部类总结(含概念和实例)

    Java 内部类总结 Java 内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用 protected 和 private 修饰(而外部类只能使用 public 和缺省的包...

    JAVA内部类总结

    ### JAVA内部类总结 在Java编程语言中,内部类(Inner Classes)是一种非常重要的特性,它允许我们在一个类的内部定义另一个类。这种结构不仅能够提高代码的组织性,还能帮助我们更好地处理类与类之间的关系。根据...

    Java内部类总结,内部类的共同特征,内部类的分类等

    Java 内部类总结 Java 内部类是 Java 语言的一个重要概念,指的是在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用 protected 和 private 修饰(而...

    java语言内部类总结

    定义在一个类内部的类叫内部类,包含内部类的类称为外部类。内部类可以声明public、protected、private等访问限制,可以声明为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现...

    Java内部类总结[参考].pdf

    Java内部类总结 Java内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限...

    170331-01.匿名内部类总结.java

    170331-01.匿名内部类总结.java 170331-01.匿名内部类总结.java 匿名 内部类 总结 java

    java中的内部类总结

    Java 中的内部类是面向对象编程的一个重要特性,它允许在一个类的定义内部定义另一个类。内部类的主要优点是能够方便地访问外部类的私有成员,提供了更封装的代码组织方式,以及创建特定上下文的类实例。下面将详细...

    Java内部类总结.pdf

    总结一下,Java内部类是一种强大的工具,它增强了类的封装性和灵活性。通过内部类,开发者可以更好地组织代码,实现更复杂的逻辑,同时保持良好的代码结构。成员内部类提供了对外部类状态的访问,局部内部类提供局部...

    java语言--内部类总结

    《Java语言——内部类详解》 内部类是Java语言中一个独特且强大的特性,它允许我们在一个类的内部定义另一个类。内部类可以提供更复杂的封装,使得代码结构更加清晰,同时还能访问外部类的私有成员,提供了更高级别...

    Java中的内部类总结.doc

    Java中的内部类是一种强大的特性,它允许在一个类的定义内部定义另一个类。内部类可以作为外部类的一个成员,提供了一种灵活的代码组织方式,并且能够访问外部类的私有成员,这使得内部类在处理封装和继承时具有独特...

    java内部类总结.pdf

    Java内部类是Java语言的一个独特特性,它允许一个类被定义在另一个类的内部。这种设计使得代码结构更加紧凑,同时也提供了对封装和抽象的新层次。内部类在J2EE编程中可能用得较少,但在GUI编程中尤其常见,主要用于...

Global site tag (gtag.js) - Google Analytics