成员内部类的定义与成员内部类的使用
成员内部类
成员内部类:定义在类中方法外的类
定义格式
class 外部类 { class 内部类{ } }
在描述事物时,若一个事物内部还包含其他事物,就可以使用内部类这种结构。比如,汽车类 Car 中包含发动机
类 Engine ,这时, Engine 就可以使用内部类来描述,定义在成员位置。
代码举例:
class Car { //外部类 class Engine { //内部类 } }
package demo01; public class Body { public class Header{ public void beast(){ System.out.println("心脏跳动"); } } private String name; public void methodBoby(){ System.out.println("外部类的方法"); } public String getName() { return name; } public void setName(String name) { this.name = name; } }
访问特点
内部类可以直接访问外部类的成员,包括私有成员。
外部类要访问内部类的成员,必须要建立内部类的对象。
创建内部类对象格式:
外部类名.内部类名 对象名 = new 外部类型().new 内部类型();
访问演示,代码如下:
定义类:
package demo01; public class Body { public class Header{ public void beast(){ System.out.println("心脏跳动"); } } private String name; public void methodBoby(){ System.out.println("外部类的方法"); } public String getName() { return name; } public void setName(String name) { this.name = name; } }
public class Person { private boolean live = true; class Heart { public void jump() { // 直接访问外部类成员 if (live) { System.out.println("心脏在跳动"); } else { System.out.println("心脏不跳了"); } } } public boolean isLive() { return live; } public void setLive(boolean live) { this.live = live; } }
定义测试类
public class InnerDemo { public static void main(String[] args) { // 创建外部类对象 Person p = new Person(); // 创建内部类对象 Heart heart = p.new Heart(); // 调用内部类方法 heart.jump(); // 调用外部类方法 p.setLive(false); // 调用内部类方法 heart.jump(); } }
内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类名
和$符号 。
比如,Person$Heart.class
package demo02; public class Body { public class Header{ public void beast(){ System.out.println("心脏跳动"); } } private String name; public void methodBoby(){ System.out.println("外部类的方法"); new Header().beast(); } public String getName() { return name; } public void setName(String name) { this.name = name; } }
package demo02; /* 如果一个事物的内部包含另一个事物,那么这就是一个类内部包含另一个类。例如:身体和心·脏的关系。又如:汽车和发动机的关系。 分类: 1.成员内部类 2.局部内部类(包含匿名内部类) 成员内部类的定义格式: 修饰符cLass外部类名称{ 修饰符class内部类名称{// ... } //..... 注意:内用外,随意访问;外用内,需要内部类对象。 如何使用成员内部类?有两种方式: 1.间接方式:在外部类的方法当中,使用内部类﹔然后main只是调用外部类的方法。 */ public class Demo01InnerClass { public static void main(String[] args) { Body body = new Body(); body.methodBoby(); Body.Header header = new Body().new Header(); header.beast(); } }