Java嵌套类
2015-04-16 00:00
369 查看
摘要: 嵌套类 内部类 匿名类
在Java中可以创建几种不同类型的嵌套类:
静态嵌套类:
静态内部类可以独立于外部类被实例化,无法访问外部类中的非静态属性和方法,只能外部类的实例来访问外部类的非静态变量
非静态嵌套类(内部类)
内部类跟外部类的实例相关联,因此必须先创建外部类实例,才能创建内部类实例
影子内部类
如果内部类声明了与外部类一样的方法和属性,我们称这样的类为影子内部类
局部类
类似于内部类,但是是定义在方法体中的类,只能在定义它的方法作用域内访问。可以向其他内部类一样访问外部类的成员属性和方法, 可以访问方法体内其他的final成员变量。局部类同样可以定义在static方法中,此时只能访问外部类的静态成员,但是局部类中不能定义静态成员(常量除外,被声明为static final的除外)。
The same shadowing rules apply for local classes as for inner classes.
匿名类
顾名思义没有名字的类,他们通常声明为一个已有类的子类或者一个接口的实现。匿名类是在他们实例化的时候声明的。
在Java中可以创建几种不同类型的嵌套类:
静态嵌套类:
静态内部类可以独立于外部类被实例化,无法访问外部类中的非静态属性和方法,只能外部类的实例来访问外部类的非静态变量
public class Outer { private String name; private static String sname; public String getName(){ return name; } public static String getSname(){ return sname; } private static class Nested{ public void test(){ getSname(); System.out.println(Outer.sname); Outer outer = new Outer(); System.out.println(outer.name); } } public static void main(String[] args) { Outer.Nested instance = new Outer.Nested(); instance.test(); } }
非静态嵌套类(内部类)
内部类跟外部类的实例相关联,因此必须先创建外部类实例,才能创建内部类实例
public class Outer { private String name = "I'm private"; private static String sname; public String getName(){ return name; } public static String getSname(){ return sname; } private class Nested{ public void test(){ getSname(); System.out.println(Outer.sname); System.out.println(name); getName(); } } public static void main(String[] args) { Outer outer = new Outer(); Outer.Nested instance = outer.new Nested(); instance.test(); } }
影子内部类
如果内部类声明了与外部类一样的方法和属性,我们称这样的类为影子内部类
public class Outer { private String name = "I'm Outer private"; private class Nested{ private String name = "I'm Inner private"; public void printText(){ System.out.println(name); System.out.println(Outer.this.name); } } public static void main(String[] args) { Outer outer = new Outer(); Outer.Nested instance = outer.new Nested(); instance.printText(); } }
局部类
类似于内部类,但是是定义在方法体中的类,只能在定义它的方法作用域内访问。可以向其他内部类一样访问外部类的成员属性和方法, 可以访问方法体内其他的final成员变量。局部类同样可以定义在static方法中,此时只能访问外部类的静态成员,但是局部类中不能定义静态成员(常量除外,被声明为static final的除外)。
The same shadowing rules apply for local classes as for inner classes.
public class Outer { private String name = "I'm Outer private"; public void printText(){ final String value = "Java"; class Local{ private void test(){ System.out.println(value); System.out.println(name); } } Local local = new Local(); local.test(); } public static void main(String[] args) { Outer outer = new Outer(); outer.printText(); } }
匿名类
顾名思义没有名字的类,他们通常声明为一个已有类的子类或者一个接口的实现。匿名类是在他们实例化的时候声明的。
相关文章推荐
- 从头认识java-8.9 嵌套类(使用static的内部类)
- c++与java在嵌套类方面的比较
- 【java开发系列】—— 嵌套类与内部类
- java嵌套类(Nested Classes)总结
- java基础-嵌套类
- Effective Java-嵌套类(内部类)
- (十二)java嵌套类和内部类
- Java nested classes 嵌套类
- java中的嵌套类
- Java深入理解嵌套类和内部类
- java_嵌套类(Nested Classes)
- 【java开发系列】—— 嵌套类与内部类
- JAVA中的类-普通类,嵌套类,抽象类,接口
- java中的静态类和嵌套类
- 深入理解java嵌套类和内部类、匿名类
- java 嵌套类的详解及实例代码
- java 嵌套类(翻译自Java Tutorials)
- java 嵌套类总结
- java静态内部类(嵌套类)
- Java嵌套类