内部类三:嵌套类

嵌套类定义

如果一个内部类生命为static,这种静态内部类称为嵌套类,嵌套类的对象不需要持有外围类的对象的引用。

1) 要创建嵌套类的对象,并不需要器外围类的对象

2)不能从嵌套类的对象中访问非静态的外围类对象,因为嵌套类的对象没有指向外围类对象的引用,因此无法访问外围类对象。

 

嵌套类与普通内部类还有一个区别,普通内部类的字段与方法,只能放在类的外部层次上,所以普通内部类不能有static数据和static字段,也不能有嵌套类。

但是嵌套类都可以包含这写内容

package chapter10;

public class Parcel11 {
    
    private String hello="hello world";
    
    private static String name="zhangsan";
    
    private static class ParcelContents implements Contents {
        private int i = 11;

        @Override
        public int value() {
            //嵌套类内部访问外围类对象报错
            //System.out.println(hello);//Error: Cannot make a static reference to the non-static field hello
            
            //嵌套类内部访问外围类的static变量
            System.out.println(name);
            return i;
        }

    }

    protected static class ParcelDestination implements Destination {

        private String label;

        private ParcelDestination(String whereTo) {
            label = whereTo;
        }

        @Override
        public String readLabel() {
            return label;
        }

        /**
         * 嵌套类的static方法
         */
        public static void f() {
        }

        /**
         * 嵌套类的static变量
         */
        static int x = 10;
        
        /**
         *嵌套类中的嵌套类
         */
        static class AnthorLevel {
            public static void f() {
            }
            
            static int x=10;

        }

    }
    
    
    public static Destination destination(String s) {
        return new ParcelDestination(s);
    }
    
    public static Contents contents() {
        return new ParcelContents();
    }
    
    public static void main(String[] args) {
        
        /**
         * 外围类的静态方法,此方法中是没有this引用的
         * 之前在外围类的静态方法中,需要采用如下语法
         * Parcel11 p=new Parcel11();
         * Parcel11.Destination d= p.new Destination();
         * 
         * 现在可以直接创建嵌套类
         */
        Destination d2=new ParcelDestination("test"); //直接创建嵌套类
        
        Contents c=new ParcelContents();
        
    }
}

 

posted @ 2020-06-11 09:56  阿瞒123  阅读(211)  评论(0编辑  收藏  举报