知识大全 将内部类进行到底
Posted 知
篇首语:真者,精诚之至也,不精不诚,不能动人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 将内部类进行到底相关的知识,希望对你有一定的参考价值。
总结了一下内部类的一下特性和容易出错的地方 给大家看看~~ 有什么错误 望指正~~~ (一) Java 以后版本添加了嵌套类(Inner Class 嵌套类 内部类) 嵌套类定义在类(外部类)里面 嵌套类可以体现逻辑上的从属关系 同时对于其他类可以控制内部类不可见等 外部类的成员变量作用域是整个外部类 包括嵌套类 但外部类不能访问嵌套类的private成员 例子 public class Outer private int size; public class Inner private int counter = ; public void doStuff() size++; public static void main(String args[]) Inner inner= new Inner(); inner doStuff(); System out println(size); System out println(unter); System out println(counter); //编译错 (二)下面演示了如何在外部类之外实例出一个public Inner类对象 类名前加上外部类类名 new语句前加上外部类的引用变量 这很类似package的使用 例子 public class Outer private int size; public class Inner public void doStuff() size++; public class TestInner public static void main(String args[]) Outer outer = new Outer(); Outer Inner inner = outer new Inner(); inner doStuff(); (三)当内部类与外部类有同名变量时 缺省指本类中的变量 例子 public class Outer private int size; public class Inner private size; public void doStuff(int size) size++; this size++; Outer this size++; // 错误 Outer size++因为size不是静态变量 public static void main(String args[]) this size++; //错误 静态方法使用非静态变量this (四)在方法中定义一个嵌套类 注意嵌套类不可以访问方法的局部变量 因为方法的局部变量只存在与方法作用期间 故localvalue不可访问 而final变量的生命周期超出了方法 所以fianlvalue可用 public class Outer private int size = ; public Object makeTheInner(int localvalue) final int finalvalue = ; class Inner public String toString()return ( Inner is +size+localvalue+finalvalue); return new Inner(); public static void main(String args[]) Outer outer = new Outer(); Object obj = outer makeTheInner( ); System out println( The object is + obj); (五) 嵌套类的类名必须与包装它的外部类区别 且嵌套类的类名仅仅可以作用于定义范围中 方法中定义类 其类名名就只能出现在方法中 定义在方法中的嵌套类只能使用定义为final的局部变量 不可以使用方法中的非静态变量 嵌套类可以使用的变量种类包括 类变量 实例变量 final局部变量 嵌套类同样具有所有的访问控制权限 高级类属性 嵌套类可以是abstract类 嵌套类可以是接口 被其它嵌套类实现 定义为static的内部类将成为顶级类(top level) 它们不依赖于外部类的对象而生成 所以不可以访问外部类的对象成员 非static内部类不能定义static成员 当外部类编译时 内部类也会编译 生成的类文件格式为: OuterClass$InnerClass 如Outer$Inner class 例子 class Outer private int size = ; static class Inner int value= ; public void doStuff() size+=value; // 错误 不能访问非static 外部类程序 public class TestInner public static void main(String args[]) Outer outer = new Outer(); Inner inner = new Inner();// 这种实例也不对 应该 Out Inner innner=new Outer Inner() ; 在总结的第(五)里面 非static内部类不能定义static成员 ( )定义 static 的 内部类 如果成员变量也定义成 static 那么外围类可以直接通过类名来访问 ( )定义 static 的 内部类 如果成员变量不是 static 那么外围类需要生成内部类的对象才能访问 否则直接访问导致编译出错!! cha138/Article/program/Java/hx/201311/26203相关参考