内部内有四种
1.成员内部类:
package Classdepartment;
public class A { //外部类
static String name1 = "外部变量";
public class B{ //成员内部类
String name2 = "内部变量";
public void say() { //普通成员类的方法调用成员字段
System.out.println(name1);
}
}
}
测试类:
package Classdepartment;
public class Atest {
public static void main(String[] arg){
A a1 = new A();
System.out.println(a1.name1);//成员变量的调用
}
}
成员内部类能够直接通过创建对象调用,并且可以调用外部变量
2.静态内部类:
package Classdepartment;
public class A { //外部类
static String name1 = "外部变量";
public static class C{ //静态内部类
String name3 = "静态内部类";
public void s() {
System.out.println(name1);
}
}
}
测试类
package Classdepartment;
import Classdepartment.A.B;
public class Atest {
public static void main(String[] arg){
A a1 = new A();
System.out.println(a1.name1);//成员变量的调用 B b = a1.new B();
System.out.println(b.name2);//内部类的变量调用
}
}
静态内部类相当于成员内部类,其所处的位置存放于栈中,如要调用静态内部类则必须要先创建外部类的对象,再创建静态内部类的对象然后再调用。
3.局部内类:
package Classdepartment;
public class A { //外部类
public void main(String[] args) {
class D{ // 局部内部类
public void main(){
System.out.println("这里是局部类");
}
}
A i= new A();
D o = new D();
o.main();
o.main();
}
}
局部内部类不能在别的类里面调用,必须要在本类中调用,其实也就是相当于一个接口不想被别的类或方法继承而特有的类
暂时还没明白(代码先留着)
4.匿名内类:
package Classdepartment;
public interface IBase {
public void pub();
}
测试类
package Classdepartment;
public class IBaseTest {
public static void main(String[] args) {
IBase l = new IBase() {
@Override
public void pub() {
System.out.println("我要喝娃哈哈");
}
};
l.pub();
}
}
匿名内部类其实是一个抽象的接口,必须要在别的类中才能实现。