内部类
- 成员内部类
- 临时内部类
- 静态内部类
- 匿名内部类
成员内部类:
在类的内部类定义
调用方法:先定义外部类 再定义内部类
//定义外部类
Outter o = new Outter();
// 定义内部类
Intter i1 = o.new Intter();
成员内部类的属性方法的调用与类一致 与外部类的属性跟方法不冲突
成员内部类中不能定义静态的属性跟方法
因为静态得最先调用 而要定义成员内部类的话必须先定义外部类 与静态的定义冲突。
public class Outter {
private String name;
private int i;
//成员内部类 参考成员属性或者成员方法
public class Intter{
//成员内部类中不能定义静态的属性和方法
public int i;
public void method(){
System.out.println("Intter method.........");
}
}
临时内部类(基本不用)
与临时变量类似
public void method(){
// 临时变量
int a = 1 ;
// 临时内部类,参考临时变量
class Innter2{
private int a = 2 ;
public void method(){
System.out.println(" Innter2 method ...");
}
}
静态内部类
//静态内部类不能调用外部非静态的
public class StaticOutter {
public static class StaticIntter{
public void method(){
System.out.println("StaticIntter.....静态内部类的method方法"+s);
}
}
静态内部类的定义:
StaticOutter.StaticIntter i=new StaticOutter.StaticIntter();
匿名内部类
直接在定义的时候对接口实例化 对类进行重写
对接口的实例化 无需重新创一个类来实现接口
// 匿名内部类 对接口
SimpleInterface s = new SimpleInterface() {
@Override
public void method() {
System.out.println("好好学习天天向上------------");
}
};
对类 抽象类一样
// 匿名内部类 对类方法的重写
Student stu = new Student() {
@Override
public void method() {
System.out.println("hhhhhhhhhhhhhh...........");
}
};