java内部类public_详细讲解Java内部类

274543d587f83baf6d549fae9a1792e2.png

普通内部类

普通内部类主要有两个要点需要掌握

持有父类引用,故可以访问父类任何访问权限的变量、方法

内部类在父类外部的创建方式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;

}

}

}

方法内部类

直接定义在方法里面的内部类

享有方法同等的权限,访问外部类其他方法、成员变量。

可以访问该方法的参数,1.8以后,参数无需设置为final

享有同等方法局部变量的权限,可以访问定义在其前面的局部变量

只能在方法作用域中,访问方法内部类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();

}

}

匿名内部类

匿名内部类其实是一个重点,也是我们经常会使用的知识点。

比如创建新线程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);

}

}

}

相关视频教程推荐:java视频

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值