6.1 内部类

参考书籍:Java面向对象程序设计(第二版)–耿祥义 张跃平编著

 

前面我们知道类有两种重要的成员,即成员变量和方法,还有一种,即内部类

定义

Java支持在一个类中声明另一个类,这样的类称为内部类

而包含内部类的类称为内部类的外嵌类

 

关系:

  1. 内部类可以使用外嵌类的成员变量
  2. 内部类中的方法可以调用外嵌类的方法
  3. 内部类的类体中不可以声明类变量和类方法(即静态变量和静态方法,在4.6 static关键字有解释)
  4. 外嵌类的类体中可以用内部类声明对象作为外嵌类的成员
  5. 内部类仅仅供它的外嵌类使用,其他类不可以用某个类的内部类声明对象

 

A类

 

package p1;

public class A {
    static String chy;
    B b;                //内部类声明对象
    A(String a){            //外嵌类A带参数的构造方法
        b=new B(10);
        chy=a;
    }
    public void show(){
        b.speak();
    }
    class B{            //内部类声明
        int h;
        B(int h){          //内部类B带参数的构造方法
            this.h=h;
        }
        void speak(){
            System.out.println(chy+“是”+h);
        }
    }

}

 

主类

package p1;

public class p1 {
    public static void main(String args[]){
        A a=new A(“chy”);
        a.show();
        a.b.speak();     //对象a可以使用 内部类声明的对象作为外嵌类的成员  调用的内部类的方法
    }
}
//两个输出都是chy是10

 

注意:

(1)Java编译器生成的内部类的字节码文件的名字和通常的类不同

内部类对应的字节码文件的名字格式是“外嵌类$内部类名”,如上是:A$B.class

  1. 内部类可以被修饰为static内部类(非内部类不可以)

类是一种数据类型,那么static内部类就是外嵌类中的一种静态数据类型,这样在其他类就可以用内部类创建对象了(例子如下)

  1. static内部类不能操作外嵌类中的实例成员变量

 

 

A类

package p1;

public class A {
    static String chy;
    B b;                //内部类声明对象
    A(String a){            //外嵌类A带参数的构造方法
        b=new B(10);
        chy=a;
    }
    public void show(){
        b.speak();
    }
    static class B{            //内部类声明为static,注意:非内部类不能是static
        int h;
        B(int h){          //内部类B带参数的构造方法
            this.h=h;
        }
        void speak(){
            System.out.println(chy+“是”+h);
        }
    }

}

 

主类

package p1;

public class p1 {
    public static void main(String args[]){
        A.B c=new A.B(20);          //使用static内部类创建对象方式
        c.speak();
    }
}
//输出都是chy是20

 

 

    原文作者:weixin_42717928
    原文地址: https://blog.csdn.net/weixin_42717928/article/details/81156800
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞