-
内部类就是在一个类的内部在定义一个类。比如:A类中定义了一个B类,那么B类相对A类来说就称为内部类,而A类相对B类来说就是外部类了
-
编译之后外部类Outer.class,内部类Outer$Inner.class
-
成员内部类(不能包含静态属性,但是能包含静态常量)
public class Outer{ private int id = 10; private int age = 10; public void out(){ System.out.println("外部类方法"); } //成员内部类 public class Inner{ private int age = 20; //和外部类属性重名,优先访问 public void in(){ System.out.println("内部类方法"); } //可以直接获得外部类的私有属性和方法 public void getId(){ System.out.println(id); } public void getAge(){ System.out.println(age); //20 //若要访问外部类重名的属性,必须使用类名.this.属性名 System.out.println(Outer.this.age); //10 } } } public class Test{ public static void main(String[] args){ Outer outer = new Outer(); //通过外部类来实例化内部类 Outer.Inner inner = outer.new Inner(); inner.in(); //内部类方法 inner.getId(); //10 } }
-
静态内部类(和外部类相同)
public class Outer{ private int id = 10; public void out(){ System.out.println("外部类方法"); } //static修饰的静态内部类 public static class Inner{ public void in(){ System.out.println("内部类方法"); } public void getId(){ //System.out.println(id); //静态内部类不能直接拿不到外部方法 Outer outer = new Outer(); System.out.println(outer.id); } } } public class Test{ public static void main(String[] args){ Outer.Inner inner = new Outer.Inner(); inner.in(); //内部类方法 } }
-
局部内部类(作用范围仅限于当前方法,不能加任何修饰符)
public class Outer{ private int id = 10; public void method(){ //定义局部变量 String address = "广州"; //局部内部类(不能包含静态变量,但是可以包含静态常量) class Inner{ public void get(){ System.out.println(id); //可以直接访问外部类属性 System.out.println(address); //访问局部变量(jdk1.7要求变量必须是final常量,jdk1.8会自动添加final) } } //创建内部类对象 Inner inner = new Inner(); inner.get(); } } public class Test{ public static void main(String[] args){ Outer outer = new Outer(); outer.method(); } }
-
匿名内部类(没有类名的局部内部类)
public class Test{ public static void main(String[] args){ //没有名字初始化类,不用将实例保存到变量中 new Apple().eat(); //吃苹果 UserService userservice = new UserService(){ @Override public void hello(){ System.out.println("Hello"); } }; userservice.hello(); //Hello } } class Apple{ public void eat(){ System.out.println("吃苹果"); } } interface UserService{ void hello(); }
内部类
最新推荐文章于 2024-11-03 11:01:20 发布