内部类(六)---嵌套类

时间:2021-11-07 19:28:49
  • 如果不需要内部类与其外围类对象之间有联系,可以将内部类声明为static。通常称为嵌套类。
  • 普通的内部类对象隐式地保存了一个引用,指向创建它的外围类对象。
  • 嵌套类意味着:①要创建嵌套类的对象,并不需要其外围类的对象。②不能从嵌套类的对象中访问非静态的外围类对象。
  • 嵌套类和外围类还有一个区别:普通内部类的字段与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static字段,也不能包含嵌套类,但是嵌套类可以包含所有这些东西。
/** * Created by Panda on 2018/6/10. */
public class Parcel11 {
    private static class ParcelContents implements Contents{
        private int i=11;
        @Override
        public int value() {
            return i;
        }
    }
    protected static class ParcelDestination implements Destination{
        private String label;
        private ParcelDestination(String whereTo){
            label=whereTo;
        }
        @Override
        public String readLabel() {
            return label;
        }
        public static void f(){}
        static int x=10;
        static class AnotherLevel{
            public static void f(){}
            static int x=10;
        }
    }
    //在普通的内部类中,通过一个特殊的this引用可以链接到其外围类对象,。
    //嵌套类就没有这个特殊的this引用,这使得它类似于一个static方法。
    public static Destination destination(String s){
        return new ParcelDestination(s);
    }
    public static Contents contents(){
        return new ParcelContents();
    }

    public static void main(String[] args) {
        Contents contents=contents();
        Destination destination=destination("milk");
    }
}

接口内部的类

  • 很多情况下,不能在接口内部放置任何代码,但是嵌套类可以作为接口的一部分。接口中的任何类都自动地是public和static的。因为类是static,只是将嵌套类置于接口的命名空间内,并不违反接口的规则。甚至可以在内部类中实现其外围接口。
    内部类(六)---嵌套类
    如果想要创建某些公共代码,使得它们可以被某个接口的所有不同实现所共用,就使用接口内部的嵌套类会显得很方便。

从多层嵌套类中访问外部类的成员

内部类(六)---嵌套类