java总结(内部类)
2014-08-18 00:19
218 查看
1、内部类顾名思义就是定义在类内部的类
内部类根据在类内部的位置可以分为:
1)静态内部类 :使用static关键字修饰,声明 在类体中
静态内部类只能访问外部类的静态成员变量 不是太常用 一般在程序测试中用
在静态内部类中不可以访问外部类中的非静态成员变量
2)成员内部类 声明在类体中 不适用static 具有类的成员特征 必须有类的实例才能
才能创建内部类实例,内部类实例可以访问共享外部类的成员变量,静态非静态都可以 很常用
3)局部内部类 把类声明在方法中 作用域类似局部变量
4)匿名内部类 匿名类 可以写在内何地方就像一般的语句 很常见 语法很想创建对象
Thread thread = new Thread(){}
匿名类是对原类的继承 同时创建了实例 {}就是继承
以后的类体中 类体中可以使用所有类的语法
匿名类不能写构造器
匿名类可以从抽象或者接口中继承 必须提供抽象方法的实现
5)内部类可以编译成独立的class文件 但是在类会加上外部类的类名
内部类根据在类内部的位置可以分为:
1)静态内部类 :使用static关键字修饰,声明 在类体中
静态内部类只能访问外部类的静态成员变量 不是太常用 一般在程序测试中用
public class OutClass { private static String name="张三"; private String name2 = "李四"; static class InnerClass{ private String stuname = name; //private String stuname2 = name2; //出错 public void sys(){ System.out.println("innerclass" + stuname); } } public static void main(String[] args){ InnerClass inner = new InnerClass(); inner.sys(); System.out.println("outclass" + OutClass.name); } } }输出结果 innerclass 张三 outclass 张三
在静态内部类中不可以访问外部类中的非静态成员变量
2)成员内部类 声明在类体中 不适用static 具有类的成员特征 必须有类的实例才能
才能创建内部类实例,内部类实例可以访问共享外部类的成员变量,静态非静态都可以 很常用
public class OutClass{ private static String name1 = "张三"; private String name2 = "李四"; class InnerClass{ private String stuname1 = name1; private String stuname2 = name2; public void sys(){ System.out.println("innnerclass stuname1" + stuname1); System.out.println("innerclass stuname2" + stuname2); } } public static void main(String[] args){ OutClass out = new OutClass(); InnerClass inner = out.new InnerClass(); //内部类的声明必须在创建外部类实例后 用外部类实例<span style="white-space:pre"> </span>//创建 inner.sys(); System.out.println("outclass name1" + name1); System.out.println("outclass name2" + name2); } }
3)局部内部类 把类声明在方法中 作用域类似局部变量
public class AnnInnerClass { int r = 9; public static void main(String[] args){ int a = 1; final int b = 5; class Foo{ int c = 6; public void test(){ //System.out.println(a); 出错 a变量不是final的 System.out.println(b); } } } }
4)匿名内部类 匿名类 可以写在内何地方就像一般的语句 很常见 语法很想创建对象
Thread thread = new Thread(){}
匿名类是对原类的继承 同时创建了实例 {}就是继承
以后的类体中 类体中可以使用所有类的语法
匿名类不能写构造器
匿名类可以从抽象或者接口中继承 必须提供抽象方法的实现
5)内部类可以编译成独立的class文件 但是在类会加上外部类的类名