public class Demo01 {
public static void main(String[] args) {
/**
* 假设我们现在要调用接口中的方法,这个方法需要传递一个参数,是一个接口类型
* 这个时候我们没法实例化这个接口,并且这个东西我们可能只需要使用一次
* 因此我们需要写一个内部类来实现
*/
class Student implements Person {
@Override
public void test() {
// TODO Auto-generated method stub
}
}
Student s = new Student();
//此时我们就可以使用Other类里面的方法了
Other o = new Other();
o.test(s);
}
}
interface Person {
public void test();
}
class Other {
public void test(Person p) {
}
}
简单来说,使用场景就是:
? 1、不需要重复多次使用的类
? 2、需要使用的方法传递的参数不方便实例化
/**
* 内部类
*/
public class Outer {
int a = 10;
//a = 20;
/**
* 外部类
*/
class inner {
public void say() {
System.out.println(a);
}
}
}
问题描述:
在这段代码中,假设我们在外部类的第二行执行a=20,修改a的值,程序将会报错,说明此时a默认是final修饰的常量,那么为什么会这样呢?
原因:
因为类在编译的时候会编译成一个一个的class文件,那么为了保证内部类中的使用的变量与外部类中保持一致,那么系统自动将外部类中的成员变量自动变成final修饰的常量。
原文:https://www.cnblogs.com/huangwenchao0821/p/14529572.html