内部类

目录

 

一 、内部类的基本定义

二 、使用 static 定义内部类

三 、在外部访问内部类

四 、在方法中定义内部类


 

一 、内部类的基本定义

在一个类的内部还存在另外一个类,则成为内部类

 定义一个内部类:

class Outer {                       //定义外部类
    private String info = "hello world";  //定义外部类的私有属性
    class Inner {               //定义内部类
        public void print() {  //内部类的方法
            System.out.println(info); //直接访问外部类的私有属性
        }
    };
    public void fun() {    //外部类的方法
        new Inner().print();  //通过内部类对象调用内部类方法
    }
}
public class InnerClassDemo01 {
    public static void main(String[] args) {
        new Outer().fun();      //调用外部类的fun()方法
    }
}

程序运行结果:

内部类的存在会增加一个类的结构复杂度,那么定义内部类有什么优点呢?此时,将内部类拿到外面,再实现一次以上代码的功能,就能发现内部类的优点。

class Outer {
    private String info = "hello world";

    public String getInfo() {
        return this.info;
    }

    public void fun() {
        new Inner(this).print();  //将操作此方法的当前对象传递到Inner中
    }
}

class Inner {
    private Outer out = null;       //声明外部类对象
    public Inner(Outer out) {       //接收外部类对象实例
        this.out = out;
    }
    public void print() {
        System.out.println(out.getInfo());  //打印外部类的私有属性
    }
};

public class InnerClassDemo02 {
    public static void main(String[] args) {
        new Outer().fun();   //调用Outer类的fun()方法
    }
}

以上程序完成了与内部类相同的功能,但是代码明显比之前更加复杂,所以内部类的优点是 可以方便地访问外部类中的私有属性

 

 

二 、使用 static 定义内部类

使用 static 声明的内部类不能访问 非static 的外部类属性

class Outer {
    private static String info = "hello world";   //定义 static 类型私有属性

    static class Inner {   //使用 static 定义内部类
        public void print() {
            System.out.println(info);  //访问 static 类型的外部类私有属性
        }
    }
}

public class InnerClassDemo03 {
    public static void main(String[] args) {
        new Outer.Inner().print();   //访问内部类
    }
}

 

 

三 、在外部访问内部类

一个内部类除了可以通过外部类访问,也可以直接在其它类中进行调用,调用的基本格式为:

外部类.内部类  内部类对象 = 外部类实例.new  内部类()

class Outer {
    private String info = "hello world";
    class Inner {
        public void print() {
            System.out.println(info);
        }
    };
}
public class InnerClassDemo04 {
    public static void main(String[] args) {
        Outer out = new Outer();          //实例化外部类对象
        Outer.Inner in = out.new Inner(); //实例化内部类对象
        in.print();                       //调用内部类方法
    }
}

 

 

四 、在方法中定义内部类

在方法中定义的内部类不能直接访问方法中的参数,如果方法中的参数想要被内部类所访问,则参数前必须加上 final 关键字  

class Outer {
    private String info = "hello world";
    public void fun(final int temp) {  //参数要被访问必须用 final 关键字声明
        class Inner {
            public void print() {
                System.out.println("类中的属性:" + info);
                System.out.println("方法中的参数:" + temp);
            }
        };
        new Inner().print();
    }
}

public class InnerClassDemo05 {
    public static void main(String[] args) {
        new Outer().fun(20);
    }
}

程序运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值