一些内部类
-
内部类:就是在一个类的内部在定义一个类。(先不要纠结,平时不太用到,以后会学的更仔细,思想很重要,一个类居然有这么多种写法,扩展眼界)
-
成员内部类
- 建立一个外部类Outer类,里面再写内部类Inner
public class Outer { private int id=10; public void out(){ System.out.println("这是外部类的方法"); } public class Inner{ public void in(){ System.out.println("这是内部类的方法"); } //获得外部类的私有属性(正常类是做不到的,正常类属性私有,需要暴露get和set方法,然后通过调用get和set方法去获取) public void getID(){ System.out.println(id); } } }
-
来个测试类Application
public class Application { public static void main(String[] args) { Outer outer = new Outer(); //通过这个外部类来实例化内部类~ //outer.new Inner(); Outer.Inner inner = outer.new Inner();//得到的对象类型是Outer.Inner //inner.in();//输出:这是内部类的方法 inner.getID();//输出:10 } }
-
静态内部类
-
静态内部类是无法调用非静态的属性的。(除非属性也是非静态的才可以)
public class Outer { private int id=10; public void out(){ System.out.println("这是外部类的方法"); } public static class Inner{ public void in(){ System.out.println("这是内部类的方法"); } } }
-
-
特别的内部类
public class Outer { } //一个java类中可以有多个class类。但是只有一个public class class A{ public static void main(String[] args) { //方便我们写测试类 } }
-
局部内部类
public class Outer { //局部内部类(在方法里面写的类,类比:方法里面的属性是局部属性) public void mathod(){ class Inner{ public void in(){ } } } }
-
匿名内部类(没有名字的类)
package com.oop.demo10; public class Test { public static void main(String[] args) { // Apple apple = new Apple(); //这是有名字的 //没有名字的初始化类,不用保存到变量中 new Apple().eat(); //这个实现类是返回一个userService对象的,但是这个实现UserService也是没有名字的 UserService userService=new UserService() { @Override public void hello() { } }; } } class Apple{ public void eat(){ System.out.println("1"); } } interface UserService{ void hello(); }