项目地址
1.什么叫内部类:
内部类就是类里面的类就叫内部类
2.作用:
弥补java单继承的缺陷。虽然有接口,但是,不是所有别人的类都是接口,它很大概率是一个类,这样就实现就尴尬啦。然后就有了内部类,在内部类里面可以继承类,也可以实现接口,而且外部类已经继承了,内部类也可以继承,就是外部类,继不继承都没关系。
没有内部类的时候:
有了内部类之后就可以解决啦:
1.多少种内部类(4种)
1.成员内部类
成员内部类:跟成员方法,成员变量,想到一起,其实就是更他们是同一个位置
它可以调用外部类(这里就是MyMemberInnerClass)的全部方法
public class Father1 {
public void father1Speak(){
System.out.println("father 1");
}
}
public class Father2 {
public void father2Speak(){
System.out.println("father 2");
}
}
怎么调用成员内部类呢?
先new外部类,再通过实例的外部类获取内部类
实例外部类.new 内部类
执行结果:
2.静态内部类
静态内部类其实就是在成员内部类前面加了个static。
它只能调用外部类的静态方法,静态成员变量。
使用方法:
MyStaticInnerClass.StaticInnerClass staticInnerClass = new MyStaticInnerClass.StaticInnerClass();
执行
/**
* 2.静态内部类:只能访问外部类的静态方法,
* 可以直接通过外部类调用
*/
System.out.println("------------静态内部类------------");
MyStaticInnerClass.StaticInnerClass staticInnerClass = new MyStaticInnerClass.StaticInnerClass();
staticInnerClass.hello();//调用静态方法
staticInnerClass.father2Speak();//调用内部类实现的父类的方法
运行结果:
3.局部内部类(方法内部类):
为什么叫局部内部类呢?因为这个类在外部类的方法里面new的,且执行了里面的方法,它只能这样子执行,所以叫局部内部类。为什么叫方法内部类呢?因为这个类啊,在方法里面的,所以叫方法内部类。
局部内部类(方法内部类)的执行方法:
1.
4.匿名内部类(它跟局部内部类有点像,感觉不像内部类,因为它不能继承父类)。
它跟局部内部类也都是在方法里面的,也都是执行了方法后,就执行。它在方法里面直接new 个接口,实现接口的方法。
特点:它可以调用外部类的全部方法,成员变量,调用方法里面的变量的时候,要在这个变量的前面加一个final修饰。
执行方法也是直接调用方法即可:
执行结果: