java内部类种类及其特点
2017-06-16 本文已影响141人
cobs
定义
内部类是指在一个外部类的内部再定义一个类。编译成功,就会成为完全不同的两类。
内部类有四种情况
- 成员内部类:成员内部类,就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private的。同时外部类要访问内部类的所有成员变量/方法,则需要通过内部类的对象来获取。实例化方式:new Out().new In();
- 局部内部类:是指内部类定义在方法和作用域内。
- 静态内部类:其实它和成员内部类很相似,只是只能访问外部类的静态成员变量,具有局限性。实例化方式:new Out.In();其实你会发现就是把内部类看成一个属性来对待。
- 匿名内部类:匿名内部类不能加访问修饰符。其实我们最常见的执行一个线程就是用的内部类的方式。
new Thread(){ @Override public void run(){ System.out.println(name); } }.start();
例子
成员内部类
package innerclass;
public class innerOut {
private int num = 12;
class innerIn {
private int num = 13;
public void print() {
int num = 14;
System.out.println("局部变量:" + num);
System.out.println("内部类变量:" + this.num);
System.out.println("外部类变量:" + innerOut.this.num);
}
}
}
静态内部类
package innerclass;
public class Out {
private static int age = 12;
static class In {
public void print() {
System.out.println(age);
}
}
}
匿名内部类
package innerclass;
public class anonymityClass {
//注意是final类型的
public void startThread(final String name){
new Thread(){
@Override
public void run(){
System.out.println(name);
}
}.start();
}
}
局部内部类
package innerclass;
public class methodInnerClass {
private int num = 12;
public void Print(final int x) {
class In {
public void inPrint() {
System.out.println(x);
System.out.println(num);
}
}
new In().inPrint();
}
}
内部类的特点总结
在方法间定义的非静态内部类:
- 外围类和内部类可互相访问自己的私有成员。
- 内部类中不能定义静态成员变量。
在方法间定义的静态内部类:
- 只能访问外部类的静态成员。
在方法中定义的局部内部类:
- 该内部类没有任何的访问控制权限
- 外围类看不见方法中的局部内部类的,但是局部内部类可以访问外围类的任何成员。
- 方法体中可以访问局部内部类,但是访问语句必须在定义局部内部类之后。
- 局部内部类只能访问方法体中的常量,即用final修饰的成员。
在方法中定义的匿名内部类:
- 没有构造器,取而代之的是将构造器参数传递给超类构造器。
既然了解了内部类,大家可以想想,我们平时到底哪些用到了内部类,请留言到评论区哦,欢迎大家讨论!!简友们都太低调,都不愿评论!
上一篇文章 java 线程池使用和详解
如有什么不对的地方,欢迎大家指出来,我们共同学习!!
欢迎关注我的微信公众号cobs-snail,让我们一起前进吧!!
