标签:成员内部类 dash void this list onclick roi 默认 变量
可以将一个类的定义放在另一个类的定义内部,这就是内部类
——《Java编程思想》 在java中,内部类可分为四类:
成员内部类是最普通的内部类:
public class OutClass {
private String out;
public String name = "out";
public InnerClass getInner(){
return new InnerClass();
}
public class InnerClass {
private String inner;
public String name = "inner";
public String getOutName() {
//访问外部类变量
return OutClass.this.name;
}
public String getInnerName() {
return name;
}
}
}
复制代码
InnerClass
就是一个内部类,它就像外部类OutClass
的一个成员,可以无限制的访问外部类的成员变量和方法。 不过需要注意的是,当当成员内部类拥有和外部类同名的成员变量或者方法时(例如代码中的name
),当通过内部类访问该变量时默认情况下访问的是成员内部类的成员。如果需要访问外部类的变量,则需要:OutClass.this.name
。 外部类如果想要访问内部类的成员变量和函数,必须先创建一个成员内部类的对象,然后再通过该对象的引用进行访问。 如果要创建内部类,必须存在一个外部类的对象:
OutClass.InnerClass innerClass1 = outClass.getInner();
OutClass.InnerClass innerClass2 = outClass.new InnerClass();
复制代码
和成员变量一样,内部类可以拥有private访问权限、protected访问权限、public修饰。
一个方法或者一个作用域里面的类,就是方法内部类。
private Object fun() {
class Fun {
}
return new Fun();
}
复制代码
它的访问权限仅限于方法内,是不能有public、protected、private以及static修饰符的。
作为Android开发者,接触的最多的内部类就是匿名内部类,没错,就在编写事件监听的代码时就是使用匿名内部类:
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
});
复制代码
大部分匿名内部类用于接口回调,匿名内部类也是不能有访问修饰符和static修饰符的。匿名内部类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的实现或是重写。
静态内部类也是定义在另一个类里面的类,如果把成员内部类理解为成员变量,那么久可以把静态内部类理解为静态成员变量。静态内部类不可以外部类的非static成员变量或者方法。
public class OutClass {
private String out;
public String name = "out";
public InnerClass getInner(){
return new InnerClass();
}
static class InnerClass {
private String inner;
public String name = "inner";
}
}
//初始化
OutClass.InnerClass innerClass = new OutClass.InnerClass();
复制代码
总结内部类的作用主要有:
标签:成员内部类 dash void this list onclick roi 默认 变量
原文地址:https://www.cnblogs.com/pz2134/p/11904260.html