什么是内部类?内部类的作用?
1、静态内部类
把一个类定义在一个类的内部,这个类就称之为静态内部类。
可以访问外部类的成员。外部类想要访问内部类就要创建对象
2、成员内部类
创建对象的方法
成员内部类不是静态的:
外部类名.内部类名 对象名=new 外部类型().new.内部类();
成员内部类是静态的时候:
外部类名.内部类名 对象名=new 外部类名.内部类名();
局部内部类就是定义在一个方法的类
为什么局部内部类访问局部变量必须加final修饰呢?因为局部变量是随着方法的调用而调用,使用完毕就消失,而堆内存的数据并不会立即消失。所以,堆内存还是用该变量,而该变量已经没有了。为了让该值还存在,就加final修饰。原因是,当我们使用final修饰变量后,堆内存直接存储的是值,而不是变量名。
我们所知道static是不能用来修饰类的,但是成员内部类可以看做外部类中的一个成员,所以可以用static修饰,这种用static修饰的内部类我们称作静态内部类,也称作嵌套内部类.
特点:不能使用外部类的非static成员变量和成员方法
public interface Demo {
void show();
}
class Outer {
private class test implements Demo {
public void show() {
System.out.println(“密码备份文件”);
}
}
public Demo getInner() {
return new test();
}
}我们来看其测试 public static void main(String[] args) {
Outer outer = new Outer();
Demo d = outer.getInner();
i.show();
}
//运行结果
密码备份文件这样做的好处之一就是,我们可以在这个public方法中增加一些判断语句,起到数据安全的作用。其次呢,我们的对外可见的只是getInner()这个方法,它返回了一个Demo接口的一个实例,而我们真正的内部类的名称就被隐藏起来了(二) 实现多继承 ※
样的话我就有点懵了,这样如何区分这个方法是接口的还是继承的,所以我们使用内部类解决这个问题 public class DemoTest extends MyDemo {
private class inner implements Demo {
public void test() {
System.out.println(“接口的test方法”);
}
}
public Demo getIn() {
return new inner();
}
public static void main(String[] args) {
//调用接口而来的test()方法
DemoTest dt = new DemoTest();
Demo d = dt.getIn();
d.test();
可以实现多继承