• 欢迎光临~

Java之内部类

开发技术 开发技术 2022-01-26 134次浏览

内部类:

内部类与普通类其实是相似的,只是位置不同导致了有一些使用上的差别(或者说是注意事项)。

package Demo_1_26_内部类;

public class Outter {      // 外部类
    private String msg = "www";     //私有成员属性
    public void fun(){// 普通方法
        Inner inner = new Inner();
        inner.print();
    }
        class Inner{    // 在Out类中定义内部类Inner
            public void print(){
                System.out.println(Outter.this.msg);    // Out类中的属性
            }
        }
    }

 

package Demo_1_26_内部类;

public class Main {
    public static void main(String[] args) {
        Outter outter = new Outter();    // 实例化外部类对象
        outter.fun();  // 调用外部类方法
    }
}

 

所以内部类的结构不合理却还存在的好处是什么?

public class Outter {      // 外部类
    private String msg = "www";     //私有成员属性
}

如果msg需要被其它类使用,那么就需要各种操作来设置引用的调用。

 

所以内部类的存在就是可以轻松访问外部类的私有属性或私有方法。

同理外部类也可以轻松地访问内部类的私有属性或私有方法。

 

package Demo_1_26_内部类;

public class Outer {      // 外部类
    private String msg = "www";     //私有成员属性
    public void fun(){// 普通方法
        Inner inner = new Inner();  // 创建内部类对象
        System.out.println(inner.inFo); // 访问内部类的私有属性
        inner.print();  // 调用内部类方法
    }
        class Inner{    // 在Out类中定义内部类Inner
            private String inFo = "天气真好!";
            public void print(){    // 内部类方法
                System.out.println(Outer.this.msg);    // Out类中的属性
            }
        }
    }

 

  使用了内部类之后,内部类与外部类之间的私有操作的访问就不再需要通过setteer、getter以及其它的间接方式完成了,可以直接进行处理操作。

  需要注意的是:内部类本身也是一个类,虽然大部分时候内部类是被外部类包裹的,但是外部依然可以产生内部类的实例化对象,格式如下:

package Demo_1_26_内部类;

public class Main {
    public static void main(String[] args) {
        Outer.Inner in = new Outer().new Inner();   // 如果内部类内部还有类就继续 .new 内部类()
    }
}

  在内部类编译完成之后会自动形成一个" Outer$Inner.class"类文件,其中" $ " 符号在程序中的符号就是 " . " 

如果不允许外部使用内部类,可以将内部类进行私有化,在类前加上private权限控制:

package Demo_1_26_内部类;

public class Outer {      // 外部类
    private String msg = "www";     //私有成员属性
    public void fun(){// 普通方法
        Inner inner = new Inner();  // 创建内部类对象
        System.out.println(inner.inFo); // 访问内部类的私有属性
        inner.print();  // 调用内部类方法
    }
        private class Inner{    // 在Out类中定义内部类Inner,权限控制,不允许外部使用
            private String inFo = "天气真好!";
            public void print(){    // 内部类方法
                System.out.println(Outer.this.msg);    // Out类中的属性
            }
        }
    }

 

程序员灯塔
转载请注明原文链接:Java之内部类
喜欢 (0)
违法和不良信息举报电话:022-22558618 举报邮箱:dljd@tidljd.com