内部类(java)

目录

一 内部类

什么是内部类

分类

二 内部类属性

静态内部类

静态内部类实例化

静态内部类访问外部类

外部类访问静态内部类

非静态内部类(实例内部类)

实例内部类的实例化

实例内部类访问外部类成员

外部类访问实例内部类成员

注意:


一 内部类

什么是内部类

外部类里面的类被称为内部类,为外部类的一部分

分类

class OutClass{
    //被static修饰 -》静态内部类
    static class InnerClass1{
        
        }
    }
    //未被static修饰 -》实例内部类
    public class InnerClass2{

    }
    //被static修饰 -》静态内部类

    public void method(){
        //方法中定义的内部类 -》局部内部类:几乎不用
        class InnerClass3{

        }
    }
}

实例内部类:未被static修饰

静态内部类:被static修饰

局部内部类:在方法中定义的内部类,几步用不上

二 内部类属性

静态内部类

class OutClass{
    public int data4 = 4;
    private int data5 = 5;
    public static int data6 = 6;
    public void fun1(){
        System.out.println("外部内中的方法");
    }

    //被static修饰 -》静态内部类
    static class InnerClass1{
        public int data1 = 1;
        private int data2 = 2;
        public static int data3 = 3;
        public void fun(){
            System.out.println("静态内部类中的方法");
        }
    }
}
public class Main {
    public static void main(String[] args){
        OutClass.InnerClass1 innerclass1 = new OutClass.InnerClass1();
        System.out.println(innerclass1.data1);
        System.out.println(OutClass.InnerClass1.data3);
    }
}

静态内部类实例化

对于静态内部类,我们可以通过Outclass.InnerClass innerclass来进行实例化,然后通过innerclass来访问成员和方法

或者可以直接通过Outclass.InnerClass直接来访问里面静态成员和方法

静态内部类访问外部类

静态内部类无法直接访问外部类非静态成员,需通过外部类的引用

 

外部类访问静态内部类

外部类也无法直接访问内部类的非静态成员,需要通过内部类引用

注意:

创建静态内部类对象时,不需要先创建外部内对象

非静态内部类(实例内部类)

class OutClass{
    public int data4 = 4;
    private int data5 = 5;
    public static int data6 = 6;
    public void fun1(){
        System.out.println("外部内中的方法");
    }

    //未被static修饰 -》实例内部类
    public class InnerClass2{
        public int data1 = 1;
        private int data2 = 2;
        public static final int data3 = 3;
        public void fun(){
            System.out.println("实例内部类中的方法");
        }
    }

}

无法定义静态变量,可以加上final将其变成常量就可以进行定义

      public static final int data3 = 3;

实例内部类的实例化

需要先将外部类实例化然后再实例化内部类

public class Main {
    public static void main(String[] args){
        OutClass outclass = new OutClass();
        OutClass.InnerClass2 innerClass2 = outclass.new InnerClass2();
        System.out.println(innerClass2.data1);
        System.out.println(OutClass.InnerClass2.data3);
    }
}

可以通过实例化的对象访问非静态成员

也可以直接访问static final的成员

实例内部类访问外部类成员

非静态内方法可以随意访问外部成员,但如果有相同成员名的话,想要调用外部成员的用 外部类.this

外部类访问实例内部类成员

访问方式和静态内部类一样

注意:

1.外部类中的任何成员都可以在实例内部类中直接访问

2.实例内部类所处的位置于外部类成员位置相同,因此也受public,private等访问限定符的约束

3.在实例在实例内部类方法中访问同名的成员时,优先访问自己的,如果要访问外部类同名的成员,必须:外部类名.this.同名成员 来访问

4.实例内部类对象必须在先有外部类对象前提下才能创建

5.实例内部类的非静态方法包含了一个指向外部类对象的引用

6.外部类中,不能直接访问实例内部类中的成员,要访问必须要创建内部类的对象

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值