java内部类 和外嵌类

/* day in 2015 10 08 night @damon 关于内部类的理解 :java 中支持在一个类中定义内部类,而类本身称为外嵌类 内部类的外嵌类的变量在内部类仍然有效,内部类的类中的方法 也可以调用外部类中的方法。 内部类中不能傻声明类变量和类方法,外嵌类中可以用内部类声明对象 作为外嵌类的成员 内部类仅仅作为外嵌类使用,其他的类不能用某个类来声明对象 */

//下面将做一个书上的例子做为理解

//class RedCow
class RedCowOut//外嵌类
{
    static String formName;//static 静态变量
    RedCow cow;//内部类声明对象
    RedCowOut()//构造函数的声明
    {
        //无内容
    }
    RedCowOut(String s)//带参数的构造函数,进行初始化
    {
        cow = new RedCow(150,122,5000);//初始化体长和价格
        formName = s;//向构造函数传入初始化用的类属性
    }
    void showCow()//声明一个显示信息的函数 用来将信息输出
    {   
        //外嵌类可以 用内部类声明对象,然后用对象 调用 内部类中的方法

        cow.speack();//直接调用内部类中的输出信息的方法
    }
    class RedCow//声明外类
    {
        //定义属性file
        String cowName = "reddada";//初始化
        //声明体长 价格
        int height,weight,price;
        RedCow(int h,int w,int p)//构造函数的声明
        {
            height = h;//通过构造函数传入值 进行函数的初始化

            weight  = w;
            price = p;
        }
        void speack()
        {
            System.out.println("name "+" "+cowName+"height"+" "+height+"weight"+weight+" address "+formName);
        }
    }//内部类 结束
}//外部类结束

public class  test1
{
    public static void main(String[] args) 
    {
        RedCowOut dada = new RedCowOut("图书馆");//传入初始化用的参数

        //dada.showCow();//直接调用外嵌类中的显示函数 封装调用
        //另一种调用方式
        dada.cow.speack();//直接调用 外嵌类中声明的内部类的对象 然后再调用 内部类的方法
        System.out.println("Hello World!");
    }
}

值得注意的是java编译器生成内部类的字节码文件的名字和通常类的类不同,内部类对应的字节码文件格式是:“外嵌类$内部类”。
内部类可以被修饰为static内部类。

你可能感兴趣的:(内部类和外嵌类)