16.初识内部类
内部类:
内部类就是在一个类的内部再定义一个类,比如,A类中定义了一个B类,那么B类相对于A类来说就成为内部类了,而A类相对于B类来说就是一个外部类了。
成员内部类:获得外部类的私有属性、私有方法...
1 package com.oop.demo11; 2 3 public class Outer { 4 5 private int id = 10; 6 7 public void out() { 8 System.out.println("这是外部类的方法"); 9 } 10 11 public class Inner { 12 public void in() { 13 System.out.println("这是内部类的方法"); 14 } 15 16 //获得外部类的私有属性、私有方法... 17 public void getId() { 18 System.out.println(id); 19 } 20 } 21 }
1 package com.oop; 2 3 import com.oop.demo11.Outer; 4 5 public class Application { 6 7 public static void main(String[] args) { 8 9 Outer outer = new Outer(); 10 11 //通过这个外部类来实例化内部类 12 Outer.Inner inner = outer.new Inner(); 13 inner.in(); 14 inner.getId(); 15 } 16 } 17 18 结果: 19 这是内部类的方法 20 10
静态内部类:内部类加个static,以后在lambada表达式里详解
1 package com.oop.demo11; 2 3 public class Outer { 4 5 private int id = 10; 6 7 public void out() { 8 System.out.println("这是外部类的方法"); 9 } 10 11 public static class Inner { 12 public void in() { 13 System.out.println("这是内部类的方法"); 14 } 15 } 16 }
局部内部类:
1 package com.oop.demo11; 2 3 public class Outer { 4 5 //局部内部类: 6 //和局部变量的位置一样,变量写在方法里面就是局部变量 7 public void method() { 8 9 class Inner { 10 public void in() { 11 12 } 13 } 14 } 15 }
匿名内部类:
1 package com.oop.demo11; 2 3 public class Test { 4 public static void main(String[] args) { 5 //没有名字初始化类,不用将实例保存到变量中~ 6 new Apple().eat(); 7 8 UserService userService = new UserService() { 9 @Override 10 public void hello() { 11 12 } 13 }; 14 } 15 16 } 17 18 class Apple { 19 public void eat() { 20 System.out.println("1"); 21 } 22 } 23 24 interface UserService { 25 void hello(); 26 }