栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

Java外部类(非静态)访问内部类(静态非静态)

Java 更新时间:发布时间: 百科书网 趣学号
Java外部类(非静态)访问内部类(静态/非静态)
public class OutClass {
    public int a1 = 1;
    public static int b1 = 1;
    public void outerConMethod(){
        System.out.println("外部类的普通方法!");
        
        //方法1: 获取get方法中new的实例内部类对象来调用
        getInstance().instanceConMethod();
        a1 = getInstance().b2;
        getInstance().a2 = 3;
        //方法2: 不调用get方法,自己new对象来引用
        instanceInnerClass inner1 = new instanceInnerClass();
        inner1.instanceConMethod();
        //方法3: 外部类.内部类然后在new对象(繁琐不推荐)
        OutClass.instanceInnerClass inner2 = new OutClass.instanceInnerClass();
        inner2.instanceConMethod();

        
        //直接调用即可
        staticInnerClass.innerStaticMethod();
        System.out.println(staticInnerClass.b3);

        
        //方法1: new 外部类.内部类
        OutClass.staticInnerClass staticInner1 = new OutClass.staticInnerClass();
        staticInner1.InnerConMethod();
        System.out.println(staticInner1.a3);
        //方法2: 静态内部类的引用
        staticInnerClass staticInner2 = new staticInnerClass();
        staticInner2.InnerConMethod();
        System.out.println(staticInner2.a3);
    }

    public static void outerStaticMethod(){
        System.out.println("外部类的静态方法!");
        
        OutClass outClass = new OutClass(); //第一步,建立外部类对象
        instanceInnerClass instanceInnerClass = outClass.new instanceInnerClass();//第二步,根据外部类对象建立内部类对象
        instanceInnerClass.instanceConMethod();//第三步,访问内部类非静态方法
        System.out.println(instanceInnerClass.a2);
        System.out.println(instanceInnerClass.b2);

        
        OutClass.staticInnerClass staticInner = new OutClass.staticInnerClass();
        staticInner.InnerConMethod();
        System.out.println(staticInner.a3);

        
        staticInnerClass.innerStaticMethod();
        System.out.println(staticInnerClass.b3);//直接调用
    }
    //实例内部类
    class instanceInnerClass{
        public int a2 = 2;
        public static final int b2 = 2;     //实例内部类的类变量必须加final变成常量
        //public static void InnerClass1(){}  //实例内部类一定不允许出现静态方法!
        public void instanceConMethod(){
            System.out.println("实例内部类非静态方法");
            System.out.println(a2);
            System.out.println(b2);

            
            System.out.println(a1);
            System.out.println(b1);
            outerConMethod();
            outerStaticMethod();
            
            //静态内部类名调用
            System.out.println(staticInnerClass.b3);
            staticInnerClass.innerStaticMethod();

            
            //先要创建静态内部类的对象
            staticInnerClass staticInnerClass = new staticInnerClass();
            System.out.println(staticInnerClass.a3);
            staticInnerClass.InnerConMethod();
        }
    }

    // 静态内部类:被static修饰的成员内部类
    static class staticInnerClass{
        public int a3 = 3;
        public static int b3 = 3;
        public void InnerConMethod(){
            System.out.println("静态内部类非静态方法");
            System.out.println(a3);
            
            outerStaticMethod();
            System.out.println(b1);
            innerStaticMethod();
            
            OutClass outClass = new OutClass();
            System.out.println(outClass.a1);
            outClass.outerConMethod();
            
            OutClass outClass1 = new OutClass();
            instanceInnerClass instanceInnerClass1 = outClass1.new instanceInnerClass();
            System.out.println(instanceInnerClass1.a2);
            instanceInnerClass1.instanceConMethod();
            
            System.out.println(a3);
            innerStaticMethod();
        }
        public static void innerStaticMethod(){
            System.out.println("静态内部类静态方法");
            
            OutClass outClass = new OutClass();
            System.out.println(outClass.a1);
            outClass.outerConMethod();
            
            System.out.println(b1);
            outerStaticMethod();
            
            OutClass outClass2 = new OutClass();
            instanceInnerClass instanceInnerClass1 = outClass2.new instanceInnerClass();
            System.out.println(instanceInnerClass1.a2);
            System.out.println(instanceInnerClass1.b2);
            instanceInnerClass1.instanceConMethod();
            
            OutClass.staticInnerClass staticInnerClass2 = new OutClass.staticInnerClass();
            System.out.println(staticInnerClass2.a3);
            staticInnerClass2.InnerConMethod();
        }
    }
    public instanceInnerClass getInstance(){
        //创建一个get方法, 返回new的实例内部类对象
        return new instanceInnerClass();
    }
    public static void main(String[] args) {
        // 实例化一个静态内部类
        OutClass.staticInnerClass innerClass3 = new OutClass.staticInnerClass();
        innerClass3.InnerConMethod();
    }
}
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/888922.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号