class 人{ int 心脏; 肝脏 脾脏 胃 肾脏 肺 大肠 小肠 } 汽车{ String 发动机 } 内部类 在一个类中定义一个类。比如在A类中定义B类,B类就是内部类。 格式: class 外部类名{ 修饰符 class 内部类名{ } } 内部类的特点: 1、内部类可以直接访问外部类的成员,包括私有的private修饰的。 2、外部类要访问内部类的成员,就必须要创建对象。 创建内部类对象的格式: //创建内部类的对象 // 外部类.内部类 内部类对象名=new 外部类().new 内部类(); Car.Engine ce=new Car().new Engine(); 在一个类中设计内部类的目的,大部分都是不行让外界访问,而是只想自己使用。 所以一般内部类都应该是私有化的,私有化之后,再提供一个可以让外界访问的 方法。方法内部创建内部类的对象并且调用。 内部类的划分: 1、成员内部类,建立在类中,方法外。和类的成员处于同一级别。 |-普通的成员内部类 |-静态成员内部类 访问格式:外部类名.内部类名 对象名=new 外部类名.内部类名(); 2、局部内部类,建立在类中的方法中,属于方法的局部变量级别。 局部内部类,外界是无法直接访问的,需要在方法的内部类创建对象并使用。 局部内部类可以直接访问外部类的成员,也可以访问方法内的局部变量。 //局部内部类,建立在方法中 public void method() { //外部类的方法 class Inner { //方法内的内部类--局部内部类 public void show() { //内部类中的方法 System.out.println("内部类的方法..."); } } //局部内部类在方法中定义完,就要在方法中使用,否则就没有使用的机会了。 Inner inner=new Inner(); inner.show(); } 3、匿名内部类 匿名内部类的前提,先存在一个类或接口,这个类可以是具体类,也可以是抽象类 匿名内部类的格式: new 类名(){ 重写方法 } 比如: //创建类的对象,后面增加大括号,大括号内部重写类的方法。 UserDao userDao=new UserDao() { @Override public void addUser() { } }; 匿名内部类的本质: 其实是一个继承了该类或实现了该接口的子类(实现类)的匿名对象。 就是创建一个父类(接口)的一次性的子类(实现类),并且立刻创建这个子类或实现类的对象。 就又变成了父类的引用,指向子类的对象---多态。 匿名内部类在开发中的使用: 当我们发现了某个方法需要一个接口(抽象类)的子类对象,那么我们就可以传递进去一个匿名内部类, 简化传统的创建接口或抽象类的子类,然后再创建对象的过程。