成员内部类
如果一个事务的内部包含另一个事务,那么这就是一个类内部包含另一个类。
例如:身体和心脏的关系,汽车和发动机的关系。
分类:
- 成员内部类
- 局部内部类(包含匿名内部类)
成员内部类的定义格式:
修饰符 class 外部类名称{
修饰符 class 类名称{
//...
}
//...
}
注意:内用外,随意访问;外用内,需要内部类对象。
如何使用成员内部类:
间接方式:在外部类的方法中,使用内部类,然后main只是调用外部类的方法。
直接方式:
定义内部类公式:
外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称(); eg:Body.Heart heart=new Body().new Heart();
public class Body {//外部类
public class Heart{//成员内部类
public void beat(){
System.out.println("心脏跳动:蹦蹦蹦!");
System.out.println("我叫"+name);
}
}
//外部类的成员变量
private String name;
//外部类的方法
public void methodBody(){
System.out.println("外部类的方法");
new Heart().beat();//通过外部类方法,内部新建了一个内部类对象,然后调用了内部类方法
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class DemoInnerClass {
public static void main(String[] args) {
Body body = new Body();
//间接方式:通过外部类的对象,调用外部类的方法,里面再间接使用内部类。
body.methodBody();
//直接方式:外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称();
Body.Heart heart=new Body().new Heart();
heart.beat();
}
}
内部类外部类的重名现象
如果出现重名现象,调用外部类的成员变量的格式:
外部类名称.this.外部类成员变量名
public class Outer {
int num=10;//外部类的成员变量
public class Inner{
int num=20;//内部类的成员变量
public void method(){
int num=30;//内部类方法的局部变量
System.out.println(num);//局部变量,就近原则
System.out.println(this.num);//内部类的成员变量
System.out.println(Outer.this.num);//外部类的成员变量
}
}
}
主函数调用:
public class DemoInnerClass {
public static void main(String[] args) {
//新建内部类对象
Outer.Inner obj=new Outer().new Inner();
obj.method();
}
}
输出结果:
30
20
10