欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

内部类详解————静态嵌套类

程序员文章站 2022-06-01 11:34:41
...

定义

静态嵌套类,又叫嵌套类或静态内部类。是使用static关键字修饰的内部类

书写形式

一般的书写形式:

public class Outter {
    /** 嵌套类,public等四种访问修饰符均可修饰*/
    public static class Inner {
        /** 嵌套类内部*/
    }
}

接口中的书写形式:

public interface OutInterface {
    /** 嵌套类,在接口中定义的任何类都自动的是public和static的,因此这两个关键字都可以省略*/
    class Inner {
        public void print() {
            System.out.println("print()");
        }
    }
}

嵌套类的语法规则

规则一:不能从嵌套类中访问外部类的非静态成员。

内部类详解————静态嵌套类

规则二:与普通内部类不同,嵌套类实例化不需要依赖外部类对象,与外部类没有必然联系。

public class Outter {
    /** 嵌套类*/
    public static class Inner {
        
    }
    public static void main(String[] args) {
        Outter.Inner inner = new Inner();
    }
}

规则三:与普通内部类的区别如下:

普通内部类只能包含非静态变量非静态方法非嵌套类

静态嵌套类可以包含静态和非静态变量静态和非静态方法静态和普通内部类

内部类详解————静态嵌套类

注意:“嵌套类中包含”与规则一中的“嵌套类中访问”是不同的含义,区别在于“访问”是嵌套类中调用嵌套类之外定义的成员,而“包含”则表示在嵌套类中定义)

规则四:嵌套类可以定义在接口中,并作为接口的一部分来使用。

《Java编程思想》(第四版,P203)

如果你想要创建某些公共代码,使得它们可以被某个接口的所有不同实现所共用,那么使用接口内部的嵌套类会显得很方便。

代码实例:

/** 接口*/
public interface OutInterface {
    void method_1();
    void method_2();
    /** 嵌套类*/
    class Inner {
        public void print() {
            System.out.println("print something...");
        }
    }
}
/** 实现类 */
public class OutInterfaceImpl implements OutInterface {
    private OutInterface.Inner inner = new Inner();

    @Override
    public void method_1() {
        inner.print();
    }

    @Override
    public void method_2() {
        inner.print();
    }

    public static void main(String[] args) {
        OutInterface oif = new OutInterfaceImpl();
        oif.method_1();
        oif.method_2();
    }
}

输出结果:

print something...
print something...

综上,就是静态嵌套类的详细使用,其中需要注意的问题,已经列在规则中,经过博主实操,大概也就这些内容,如有疑问和建议,欢迎文末留言。 *v*