Dotcpp  >  编程教程  >  Java内部类与异常类  >  Java内部类

Java内部类

点击打开在线编译器,边学边练

通过以往的学习,我们已经知道,类可以有两种重要的成员:成员变量方法,实际上,类还有一种成员:内部类。在一个类中定义另一个类,我们把这样的类称作内部类,包含内部类的类称作内部类的外嵌类


内部类和外嵌类之间的关系:

1)内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法。

2)内部类的类体中不可以声明类变量和类方法,外嵌类的类体中可以用内部类声明对象作为外嵌类的成员。

3)内部类仅供它的外嵌类使用,其他类不可以用某个类的内部类声明对象。

因为内部类的外嵌类的成员变量在内部类中有效,所以使得内部类和外嵌类的交互十分方便。


例如:

class RedCowForm {
    static String formName;
    RedCow cow; //内部类声明对象
    RedCowForm() {
    }
    RedCowForm(String s){
        cow = new RedCow(88,66,2000);
        formName = s;
    }
    public void showCowMess() {
        cow.speak();
    }
    class RedCow{ //内部类的声明
        String cowName = "小牛";
        int height,weight,price;
        RedCow(int h,int w,int p) {
            height = h;
            weight = w;
            price = p;
        }
        void speak() {
            System.out.println("我是"+cowName+",身高"+height+"cm,体重"+weight+"kg,生活在"+formName);
        }
    }
}
public class Main {
    public static void main(String[] args) {
        RedCowForm form = new RedCowForm("dotcpp农场");
        form.showCowMess();
        form.cow.speak();
    }
}


运行结果如下:

我是小牛,身高88cm,体重66kg,生活在dotcpp农场
我是小牛,身高88cm,体重66kg,生活在dotcpp农场


注意:Java编译器生成的内部类的字节码文件的名字和平常的类的名字不同,内部类对应的字节码文件的名字格式是“外嵌类名$内部类名”。例如:上面例子中内部类的字节码文件的名字应该是RedCowForm$RedCow.class。


内部类可以被修饰为static内部类,static内部类是外嵌类中的一种静态数据类型,程序可以在其他类中使用static内部类来创建对象,但是,static内部类不能操作外嵌类中的实例成员变量。


好了,大家可以上机实验,消化吸收本节内容。



本文固定URL:https://www.dotcpp.com/course/799

下一课:

Java匿名类

Java教程
第一章 Java入门
第二章 Java运算符和表达式
第三章 Java流程控制
第四章 Java类和对象
第五章 Java子类与继承
第六章 Java接口与实现
第七章 Java内部类与异常类
第八章 Java常用实用类
第九章 Java输入输出流
第十章 Java数组
Dotcpp在线编译      (登录可减少运行等待时间)