Java之内部类续

静态内部类

1、语法格式

【修饰符】 class 外部类名  【extends 外部类的父类】 【implements 外部类的父接口】{
    【其他修饰符】 static class  静态内部类 【extends 静态内部类的父类】 【implements 静态内部类的父接口】{
        静态内部类的成员列表;
    }
    
    外部类的其他成员列表;
}

2、 使用注意事项

(1)可以包含类的所有成员

(2)权限修饰符:4种;其他修饰符:abstract、final

(3)只能使用外部类的静态成员

(4)在外部类的外面使用静态内部类的要求 :

(1)如果使用的是静态内部类的静态成员
        外部类名.静态内部类名.静态成员
(2)如果使用的是静态内部类的非静态成员
        ①先创建静态内部类的对象
        外部类名.静态内部类名 对象名 = new 外部类名.静态内部类名(【实参列表】);
        ②通过对象调用非静态成员
        对象名.xxx

3、示例代码

class Out{
    private static int i = 10;
    static class In{
        public void method(){
            System.out.println(i);//可以
        }
        public static void test(){
            System.out.println(i);//可以
        }
    }
    
    public void outMethod(){
        In in = new In();
        in.method();
    }
    public static void outTest(){
        In in = new In();
        in.method();
    }
}
class Test{
    public static void main(String[] args){
        Out.In.test();
        
        Out.In in = new Out.In();
        in.method();
    }
}

非静态内部类

1、语法格式

【修饰符】 class 外部类名  【extends 外部类的父类】 【implements 外部类的父接口】{
    【修饰符】 class  非静态内部类 【extends 非静态内部类的父类】 【implements 非静态内部类的父接口】{
        非静态内部类的成员列表;
    }
    
    外部类的其他成员列表;
}

//使用非静态内部类的非静态成员
//(1)创建外部类的对象
外部类名  对象名1 = new  外部类名(实参列表);

//(2)通过外部类的对象去创建或获取非静态内部类的对象
//创建
外部类名.非静态内部类名  对象名2 = 对象名1.new 非静态内部类名(实参列表);

//获取
外部类名.非静态内部类名  对象名2 = 对象名1.get非静态内部类对象的方法(实参列表);

//(3)通过非静态内部类调用它的非静态成员
对象名2.xxx

2、示例代码

class Out{
    private static int i = 10;
    private int j = 20;
    class In{
        public void method(){
            System.out.println(i);
            System.out.println(j);
        }
    }
    
    public void outMethod(){
        In in = new In();
        in.method();
    }
    public static void outTest(){
    }
    
    public Inner getInner(){
        return new Inner();
    }
}
class Test{
    public static void main(String[] args){
        Out out = new Out();
        
        Out.In in1 = out.new In();        
        in1.method();
        
        Out.In in2 = out.getIn();    
        in2.method();
    }
}

局部内部类

1、语法格式

【修饰符】 class 外部类名  【extends 外部类的父类】 【implements 外部类的父接口】{
    【修饰符】 返回值类型  方法名(【形参列表】){
        【修饰符】 class  局部内部类 【extends 局部内部类的父类】 【implements 局部内部类的父接口】{
            局部内部类的成员列表;
        }
    }    
    外部类的其他成员列表;
}

2、示例代码

class Out{
    private static int i = 101;
    private int j = 220;

    
    public void outMethod(){
        class In{
            public void method(){
                //...
                System.out.println(i);
                System.out.println(j);
            }
           }
        In in = new In();
        in.method();
    }
    public static void outTest(){
        final int k = 30;
       class In{
            public void method(){
                System.out.println(i);
                System.out.println(k);
            }
           }
        In in = new In();
        in.method();
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Miki_souls

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值