public class Outer3 {
// 局部内部类 --仅存在于方法中
public void method(){
final String gender = "男";
// 局部内部类 在结构上仍旧是一个普通的类 --该有的都有
class Student{
String name;
int age;
public void eat(){
System.out.println("正在吃");
System.out.println(gender); // 局部内部类中可以使用方法中的变量, 最好将这个变量变成final的
// gender = “重新赋值”;
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
// gender = “女”;
// Student student = new Student(“张三”, 88);
// student.eat();
}
public static void main(String[] args) {
class AI implements A{
@Override
public int getNum(int range) {
return new Random().nextInt(range);
}
}
A a = new AI();
System.out.println(a.getNum(30));
A a1 = new AI();
System.out.println(a1.getNum(30));
class AIm implements A{
@Override
public int getNum(int range) {
return new Random().nextInt(range - 10) + 5;
}
}
A a2 = new AIm();
System.out.println(a2.getNum(30));
// 匿名内部类 – 没有类名的类 实际上就是局部内部类的一种简化形式
A a3 = new A() {
@Override
public int getNum(int range) {
return 0;
}
};
// 匿名内部类 – 都是父类/接口类型
B b = new B() {
@Override
public void m() {
System.out.println(“B’s m~”);
}
@Override
public void m1() {
System.out.println("重写的m1");
}
}; // 是一个没有名字的B的子类
C c = new C() {
@Override
public void me() {
System.out.println("456");
}
};
c.me();
new C(){
@Override
public void me() {
System.out.println("dfghjkl");
}
}.me();
// 匿名内部类 : 实际上就是一个没有名字的实现类/子类
}
}
interface A {
int getNum(int range);
}
abstract class B {
public abstract void m();
public void m1(){
System.out.println("abstract");
}
}
class C {
public void me(){
System.out.println(“me”);
}
}