内部类就是在一个类的内部定义一个类。我们把外边的类称为外部类
内部类的分来:
- 成员内部类
- 静态内部类
- 局部内部类
- 匿名内部类
注:成员内部类中不能写静态属性和方法
//在A类申明一个B类,此B类就是在A的内部,并且在成员变量的位置上,所以就称为成员内部类
public class Outer{
private int id;
public void out(){
System.ot.pirntln("这是外部类方法")
}
class Inner {
public void in(){
System.out.println("这是内部类")
}
}
实例化内部类
public class MemberInnerClassTest{
private String name;
private static int age;
public void run(){
}
public static void go(){
}
public class MemberInnerClass{
private String name;
//内部类访问外部类
public void test (String name){
System.out.println(name);
System.out.println(this.name);
System.out.pirntln(MemberInnerClassTest.this.name);
System.out.println(MemberInnerClassTest.age);
MemberInnerClassTest.this.run();
MemberInnerClassTest.go();
}
}
public void test(){
MemberInnerClass mic=new MemberInnerClass();
mic.name="Tom";
mic.test("hua");
}
public static void main(String [] args){
MemberInnerClassTest out=new MemberInnerClassTest();
MemberInnerClass mic=out.new MemberInnerClass();
mic.name="jik";
mic.test("kkk");
}
}
静态内部类
使用static修饰的内部类就是静态内部类。。
- static修饰成员变量:整个类的实例共享静态变量
- static修饰方法:静态方法:静态方法,只能访问static修饰的属性或方法,而非静态方法可以访问static修饰的方法或属性。
- 被static修饰的变量和方法能直接被类名调用
- static不能修饰局部变量
public calss StaticInnerClassTest{
private String name;
private static int age;
public void run(){
}
public static static go(){
}
//外部类访问静态内部类
public void test(){
//静态内部类不需要以来外部类,所以不用this
StaticInnerClass sic =new StaticInnerClass();
sic.name="tom";
sic.test1("jack");
StaticInnerClass.age=10;
StaticInnerClass.test2("xixi");
}
pirvae static class StaticInnerClass{
private String name;
private static int age;
public void test1(Strig name){
System.out.println(name);
System.out.println(this.name);
System.out.pirntln(StaticInnerClass.age);
System.out.println(StaticInnerClassTest.age);
//System.out.println(StaticInnerClassTest.this.name);//静态类不能访问非静态属性
StaticInnerClassTest.go();
}
}
}
未完,,,太多了。。。
内容来自:https://oddfar.github.io/notes/java/se/object/#_5%E3%80%81%E5%8C%BF%E5%90%8D%E5%86%85%E9%83%A8%E7%B1%BB
匿名内部类:我也只需要用一次,那我就不需要在类中先定义一个内部类,而是等待需要用的时候,我就在临时实现这个内部类,因为用次数少,可能就这一次,那么这样写内部类,更方便。不然先写出一 个内部类的全部实现来,然后就调用它一次,岂不是用完之后就一直将其放在那,那就没必要那样。
匿名内部类需要依托于其他类或者接口来创建
如果依托的是类,那么创建出来的匿名内部类就默认是这个类的子类
如果依托的是接口,那么创建出来的匿名内部类就默认是这个接口的实现类。
匿名内部类的声明必须是在使用new关键字的时候
匿名内部类的声明及创建对象必须一气呵成,并且之后能反复使用,因为没有名字



