成员内部类和局部内部类

内部类是:一个类包含一个类 就是内部类 例如:人的身体和心脏 汽车车身和发动机的关系一样都是包含

分类:

1.成员内部类

2.局部内部类

3.匿名内部类

成员内部类

成员内部类定义

成员内部类格式:

修饰符 class 外部类名称{

  修饰符 class 内部类名称{

  /...

  }

/...

}

注意:内用外 随意访问 外用内 需内部类对象

代码:

public class Body {//外部类
//成员变量
private String name;
//成员内部类
public class Heart{
public void beat(){
System.out.println("心脏跳动");
System.out.println("我的名字是"+name);
}

}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

//成员方法
public void BodyMethod(){
System.out.println("外部方法");
}
}

成员内部类的使用

1.间接方式:在外部类的方法中创建内部类对象并进行调用 在main方法中调用外部类对象

代码:

public class Body {//外部类
//成员变量
private String name;
//成员内部类
public class Heart{
public void beat(){
System.out.println("心脏跳动");
System.out.println("我的名字是"+name);
}

}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

//成员方法
public void BodyMethod(){
System.out.println("外部方法");
Heart heart = new Heart();
heart.beat();
}
}

测试类

public class test {
public static void main(String[] args) {
Body body = new Body();
body.BodyMethod();
}
}

运行结果:

 

 名字是null因为没有进行赋值 所以为空

2.直接方式 公式

外部类.内部类 对象名 = new 外部类().new  内部类();

代码:

类:

public class Body {//外部类
//成员变量
private String name;
//成员内部类
public class Heart{
public void beat(){
System.out.println("心脏跳动");
System.out.println("我的名字是"+name);
}

}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

//成员方法
public void BodyMethod(){
System.out.println("外部方法");
}
}

测试类:

public class test {
public static void main(String[] args) {
Body body = new Body();
body.BodyMethod();
System.out.println("-------------------");
//这样写的就没有办法调用外部类的方法
Body.Heart bh=new Body().new Heart();
bh.beat();

}
}

内部类的同名变量访问

如果出现了重名现象 那么格式是外部类名称.this.外部类成员变量

代码:

类:

public class Outer {//外部类
int num=10;//成员变量

public class Inner{//成员内部类
int num=20;//成员内部类的成员变量
public void MethodInner(){//成员内部类的成员方法
int num=30;//成员内部类的局部变量
System.out.println(num);//调用成员内部类的局部变量 结果:30
System.out.println(this.num);//调用成员内部类的成员变量 结果:20
System.out.println(Outer.this.num);//调用外部类的成员变量 结果:10
}
}
}

测试类:

public class test {
public static void main(String[] args) {
     //创建内部类对象
Outer.Inner oi=new Outer().new Inner();
oi.MethodInner();

}
}

运行结果:

posted @ 2022-07-04 11:38  baimingze  阅读(71)  评论(0)    收藏  举报