成员内部类的定义与成员内部类的使用

成员内部类
成员内部类:定义在类中方法外的类
定义格式
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();
    }
}

 

posted @ 2022-07-05 09:23  zj勇敢飞,xx永相随  阅读(58)  评论(0编辑  收藏  举报