今天,讲了内部类,本概念用的很少,开发中也不推介使用,但是面试题多。
分类:静态,非静态,局部,匿名。内部类
非静态:inner为普通的类
1.在inner中访问outer的属性
public class OuterClass {
private String name = "外部类属性";
private class InnerClass {// 成员内部类,非静态内部类
private String name = "内部类属性";
public void addTail() {
// 内部类访问外部类的情况
String name = "内部类局部变量";
System.out.println("把 " + name + " 添加到尾巴!");
System.out.println("把 " + this.name + " 添加到尾巴!");
System.out.println("把 " + OuterClass.this.name + " 添加到尾巴!");
}
}
2.内部类对象的创建
此时,inner是放在outer类对象中。首先创建outer对象outer
故OuterClass.InnerClass inner=outer.InnerClass()
静态内部类: Inner用static来修饰。
1.该inner属于outer的外部类,不再是outer的实例。故创建对象的时候较非静态有区别。
OuterClass.InnerClass inner=OuterClass.InnerClass();
2.inner是static的,它只能访问outer中static的属性,不能访问实例成员。
class Out {
private String name = "YaoMing";
private static int age = 34;
static class StaticInnerClass {
private String message = "hello world!";
private static int num = 11;
public void show() {
// System.out.println(name); 不能访问
System.out.println(age);// 可以访问
System.out.println(new Out().name);
}
}
局部内部类: 定义在方法中。
1.局部inner只能在outer的范围内使用。 Class inner{}
2.局部inner不能被修饰符,static修饰。
3.局部inner不能访问非 final定义变量。也就是只能访问常量。变量的作用范围已经炒出了outer类的范围,故不能访问。
匿名内部类:没有方法名,没有构造方法,只能用一次。
就是newInnerClass();这样的匿名类。
网友评论