JAVA内部类

一、实例内部类

1.语法

在一个类当中创建的另一个类叫实列内部类

public class OuterClass {

    class InnerClass{
    }

}
2.实例内部类的实例化方式
public class Test {
    OuterClass outerClass = new OuterClass();
    OuterClass.InnerClass innerClass = outerClass.new InnerClass();
}

(1)实例化内部类需要先实例化外部类对象

(2)类型是 外部类名.内部类名  实例化名称  =  外部类对象.new 内部类();

3.外部类与内部类的成员属性以及成员方法
public class OuterClass {
    public int A = 10;
    public static int B  = 20;
    public void OuterTest(){
        System.out.println(A);//10
        System.out.println(B);//20
    }
    class InnerClass{
        public int C = 30;
        //public static D = 40;
        public static final int D = 40;
        public int A = 50;
        public void InnerTest(){
            System.out.println(C);//30
            System.out.println(D);//40
            System.out.println(A);//50
            System.out.println(OuterClass.this.A);//10
        }
    }

}

(1)内部类当中不可以创建静态成员变量和方法,静态成员及方法不依赖于实例化对象,而内部类又不能直接使用,如上文所说需要先实例化外部类对象才能实例化内部类对象,所以内部类当中的静态成员的定义需要加上final

(2)外部类和内部类有重名的成员变量,优先使用当前类中的成员变量。如果在内部类当中想要调用外部类的成员变量需要通过  外部类名.this.变量名

4.注意事项

(1)外部类的成员在实列内部类方法当中可以直接访问

(2)外部类中,不能直接访问内部类成员,如果要访问,先要实例化内部类对象

二、静态内部类

1.语法
public class OuterClass {
    static class StaticInnerClass{

    }
}
 在内部类前加上一个static
2.静态内部类的实例化方式

public class Test {
    OuterClass.StaticInnerClass staticInnerClass = new OuterClass.StaticInnerClass();
}

静态内部类不同于实例内部类,静态类内部类通过类名直接实例化 

注意是通过 new OuterClass.StaticInnerClass();

而不是        new OuterClass().StaticInnerClass();

前者是直接通过类名.静态内部类

后者是外部类对象.静态内部类

静态不依赖于对象

3.外部类与静态内部类的成员属性以及成员方法

       

public class OuterClass {
    public int A = 10;
    public static int B  = 20;
    public void OuterTest(){
        System.out.println(A);//10
        System.out.println(B);//20
    }
    static class StaticInnerClass{
        public int C = 30;
        public static int D = 40;
        public void StaticInnerClassTest(){
            //System.out.println(A);
            System.out.println(out.A);
            System.out.println(B);
            System.out.println(C);
            System.out.println(D);
        }
    }

}

 (1)静态内部类当中调用外部类的非静态成员变量时会报错,因为实例化静态内部类时没有创建外部类对象,而非静态成员变量需要外部类对象调用

(2)静态内部中调用外部类成员需要通过 外部类对象.成员变量 来调用

三、匿名内部类

1.语法

这里new Itest() 相当于 一个类实现了Itest接口并且重写了里面的func方法

2.
  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值