美文网首页
Java的内部类

Java的内部类

作者: Sal | 来源:发表于2016-02-20 08:22 被阅读0次
    
    public class B {
        public int b1 = 10;
        public static int b2 = 20;
    
        public int returnB1_2() {
            return b1 + b2;
        }
    
        public static int returnB2() {
            //静态方法
            return b2;
        }
    
        public class BInn {
            //普通内部类只能引用外部类的属性和方法 但不能给外部属性和方法赋值
            //也不可以引用内部静态类和内部普通类的属性
            //普通内部类不可以有静态属性和静态方法
            int bI1 = b1;
    
            public void change() {
                B.b2 = 30; //若要修改外部静态属性需要通过构造方法实现
            }
    
            int bI2 = b2;
        }
    
        public static class BSInn {
            static int bIS2 = returnB2() - 10;
            //静态内部类只能引用外部类的静态属性和方法
            static int bIS1 = b2;
        }
    
        public int test() {
            class Test1
                    //方法内部类不允许用public static private 修饰
            {
                int t3 = b1;
                //方法内部类可以使用外部类的属性和方法
                int t4 = returnB1_2();
                int t1 = 10;
                int t2 = 20;
            }
            //而且方法内部类需要构造
            Test1 test1 = new Test1();
            return test1.t1 + test1.t2;
            //这里无法引用内部静态类和普通类的属性
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            B b = new B();
            System.out.println(B.b2); //20
    //20 直接引用普通类的静态属性
            System.out.println(B.returnB2());//20
    //20 直接引用普通类的静态方法
            System.out.println(b.returnB1_2() + b.returnB2()); //50
    //30+20 通过构造引用普通类的普通方法和静态方法
            System.out.println(b.b1 + b.b2 + b.returnB1_2() + b.returnB2());//10+20+30+20
    //通过构造引用普通类的所有属性和方法
            System.out.println(B.BSInn.bIS2);
    //20-10 直接引用静态内部类的静态属性 但不能引用静态类的普通属性//10
            B.BSInn bsi = new B.BSInn();
            System.out.println(bsi.bIS1 + bsi.bIS2);//20
    //通过构造既可以引用普通成员也可以引用静态成员
            B.BInn bi = new B().new BInn();
            bi.change();
    //通过方法change修改b2为30 但是没有生效
            System.out.println("修改厚的b2:" + B.b2);
            System.out.println("returnB2的值:" + B.returnB2());
            System.out.println(bi.bI2);//为什么这里20
            System.out.println("again!");
            B.BInn bi2 = new B().new BInn();
            System.out.println(bi2.bI2);
        }
    }
    

    相关文章

      网友评论

          本文标题:Java的内部类

          本文链接:https://www.haomeiwen.com/subject/hasvkttx.html