Java基础之内部类
定义:内部内在一个类的内部再定义一个类,比如,A类中定义一个B类,则B类相对于A类来说就是内部类,A类相对于B类来说就是外部类。
-
成员内部类(和成员变量一样定义的类)
public class Outer{ private int id = 10; public void out() { System.out.println("这是外部类的方法"); } // 成员内部类,在外部类的方法外面定义 public class Inner{ public void in(){ System.out.println("这是内部类的方法"); } // 获得外部类的私有属性~ public void getId(){ System.out.println(id); } } }
//调用方式 public class Test{ public static void main(String[] args){ // 先new外部类 Outer outer = new Outer(); // 通过外部类实例化部类 Outer.Inner inner = outer.new Inner(); inner.in(); // 获取外部类的私有属性 inner.getId(); } }
-
静态内部类 (有static关键字修饰)
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 class Outer{ private int id = 10; public void out() { System.out.println("这是外部类的方法"); // 局部内部类 class Inner{ public void in(){ System.out.println("这是局部内部类的方法"); } } } }
-
匿名内部类(没有名称初始化类(new Apple().eat()),不用将实例保存到变量中)
public class Test{ public static void main(String[] args){ // 匿名内部类,没有名字初始化类,不用将实例保存到变量中 new Apple().eat(); // 匿名内部类 new UserService(){ @Override public void login(){ } } } } class Apple{ public void eat(){ System.out.println("eat"); } } interface UserService{ void login(); }