java基础之内部类

内部类:类里面再声明类

1》默认内部类

class Outer{

private int a = 12;

class Inner{

public void test2(){

//"内部类"可以直接访问"外部类"的成员,包括私有。

System.out.println("内部类访问外部的变量a=" + a);

}

}

}

创建内部类方式:Outer.Inner inner = new Outer().new Inner();

在内部类方法中访问外部类成员变量 Outer.this.a

访问内部类成员变量 this.a

访问方法内变量 a

2》私有内部类

class Outer{

private int a = 12;

private class Inner{

public void test2(){

System.out.println("内部类访问外部的变量a=" + a);

}

}

public void test1(){

Inner inner = new Inner();

inner.test2();

}

}

私有内部类外部无法访问

3》静态内部类

class Outer{

private int a = 12;

static class Inner{

public void test2(){

System.out.println("内部类访问外部的变量a=" + a);

}

}

}

创建方式:Outer.Inner inner =new Outer.Inner();

4》局部内部类

class Outer{

public void test1(){

final int a = 10;//局部变量

class Inner{//局部内部类

public void test2(){

System.out.println(a);

}

}

Inner inner = new Inner();

inner.test2();

}

}

面试题:局部内部类访问该方法内局部变量时,变量要加final修饰,为什么?

因为方法的局部变量位于栈上,只存在于该方法的生命期内。当一个方法结束,其栈结构被删除,局部变量成为历史。但是该方法结束之后,在方法内创建的内部类对象可能仍然存在于堆中!例如,如果对它的引用被传递到其他某些代码,并存储在一个成员变量内。正因为不能保证局部变量的存活期和方法内部类对象的一样长,所以内部类对象不能使用它们。

这里存在一个疑问,那就是它的引用如何能被传递出去,我试过在外部类中定义该内部类的引用,结果是无法找到该类。

jdk1.8,不加final代码不会报错,jdk1.7以下的版本不写final会报错

其实就是在jdk1.8的环境下,系统帮你默认添加了final关键字


匿名内部类

记住,这种匿名内部类的内部是相对于外部类而言的,不是相对于接口或者抽象类

  》抽象类的匿名内部类

  》接口的匿名内部类

  》new 抽象类 或者接口,都必须实现里面的所有未实现的方法


java接口中可以定义类,也不仅限于抽象类。只是接口本身不能被实例化,接口内部的类是可以实例化的。

调用接口的内部类有两种方法:

1.接口名.类名 Outer.Inner inner =new Outer.Inner();

2.创建实现类implements接口,再直接实例化内部类

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、内部类分类: 成员内部类 局部内部类 匿名内部类 静态内部类 2、成员内部类 1.概念: 定义在一个类内部的类...
    M_JCs阅读 4,369评论 0 9
  • Java 内部类 分四种:成员内部类、局部内部类、静态内部类和匿名内部类。 1、成员内部类: 即作为外部类的一个成...
    ikaroskun阅读 5,027评论 0 13
  • 一、内部类介绍 内部类:将一个类的定义放在另一个类的定义内部。 内部类是个编译时的概念,一旦编译成功后,它就与外围...
    代码米虫阅读 3,790评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,154评论 18 399
  • 仙人多少也算有几分姿色,只是不卖而已![害羞] 曾有姑娘赤裸的说就看上仙人长的还可以,一下子让仙人想死,也让她去死...
    纵情嬉戏天地间阅读 1,579评论 0 0