如果一个事物的内部包含另一个事物,那么这就是一个类内不包含另一个类
例如:身体与心脏,汽车与发动机
分类:
1.成员内部类
格式:
修饰符 class 外部类名称{
修饰符 class 内部类名称{
//...
}
//...
}
注意:内用外,随意访问,外用内,需要内部类对象。
如何使用成员内部类?
1.间接方式:在外部类的方法当中,使用内部类,然后在main只是调用外部类方法。
2.直接方式:公式:
类名称 对象名 = new 类名称();
普通的成员内部类:【外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称();]
静态的成员内部类:【外部名.内部名 内部类对象 = new 外部类名.内部类名()】
//如果出现了重名现象,格式:外部类名称.this.外部类成员变量名
public class Outer{
int num = 10;//外部类成员变量
public class Inner{
int num = 20;//内部类的成员变量
public void MethodInner(){
int num = 30;//内部类方法的局部变量
System.out.println(num);//局部变量,就近原则
System.out.println(this.num);//内部类的成员变量
System.out.println(Outer.this.num);//外部类的成员变量
}
}
}
2.局部内部类(包含匿名内部类)
如果一个类是定义在一个方法内部的,那么这就是一个局部内部类。
"局部":只有当前所属的方法才能使用它,出了这个方法外面就不能用了。
格式:
修饰符 class 外部类名称{
修饰符 返回值类型 外部类方法名称(参数列表){
class 局部内部类名称{
//...
}
}
}
解决方法:在方法的内部,就创建局部内部类的对象,调用对象的方法
public class BodyTest {
public static void main(String[] args) {
Body.Heart bd = new Body().new Heart();
bd.show();
Body shen = new Body();
shen.useShen();
Body.gan f = new Body.gan();
f.show();
}
}
class Body {//成员内部类
private int xinLv = 100;
class Heart{
int xinTiao = 88;
public void show() {
System.out.println("心跳:"+xinTiao+"\t"+"心率:"+xinLv);
}
}
private class Shen{//私有的成员内部类,必须在外部定义一个共有方法才可以访问
private void say() {
System.out.println("我是肾");
}
}
public void useShen() {
Shen s = new Shen();
s.say();
}
static class gan{//静态内部类
private String color = "黑色";
void show() {
System.out.println("我是"+color+"的,放过自己");
}
}
}