java匿名内部类详解-java匿名类
发布时间:2023-02-09 10:45 浏览次数:次 作者:佚名
文章目录
Java内部类:你真的需要了解方法内部类吗?
Java内部类,相信很多人都用过内部类,新线程使用的匿名内部类,但是很多人对内部类的一些概念处于模糊阶段java匿名内部类详解,比如方法内部类为什么要引用方法参数,方法参数必须设置为 final ,所以本文对内部类知识进行了系统的梳理,如果有用记得收藏。
公共内部类
普通内部类有两个要点要掌握
public class Main{
public static void main(String args[]){
Outer outer = new Outer();
//外部类外部创建内部类
Outer.Inner inner = outer.new Inner();
inner.method();
}
}
class Outer{
private String value = "OuterValue";
class Inner{
public void method(){
//持有父类引用,可以访问父类private变量value
System.out.println(value);
}
//利用.this关键字,可以返回父类对象引用
public Outer outerObject(){
return Outer.this;
}
}
}
方法内部类
直接在方法内部定义的内部类
public class Main{
public static void main(String args[]){
Outer outer = new Outer();
outer.outerMethod("param");
}
}
class Outer{
public void outerMethod(String value){
class Inner {
public void innerMethod(){
//可以访问方法参数
//1.8以后,内部类访问的方法参数不必设置为final
System.out.println(value);
}
}
new Inner().innerMethod();
}
}
匿名内部类
匿名内部类其实是一个重点java匿名内部类详解,也是我们经常用到的一个知识点。
比如新建一个线程
public class Main{
public static void main(String args[]){
Thread a = new Thread(new Runnable(){
@Override
public void run(){
System.out.println("thread a is running;");
}
});
a.start();
}
}
上面代码的意思是创建一个实现了Runnable接口的匿名类对象,相当于下面的代码。 由于书写方便,我们经常使用第二种
public class Main{
public static void main(String args[]){
Thread a = new Thread(new RunnableImp());
a.start();
}
static class RunnableImp implements Runnable{
@Override
public void run(){
System.out.println("thread a is running;");
}
}
}
静态内部类
记住两点
public class Main{
Outer.Inner inner = new Outer.Inner();
}
class Outer{
private String ordValue;
private static String staValue;
static class Inner{
{
System.out.println(staValue);
//这句编译通不过
//System.out.println(ordValue);
}
}
}
参考Thinking in Java