【Java学习记录】三十二 内部类

概念

内部类是包含在类中的类,所以内部类也称为“嵌套类”,包含内部类的类称为外部类。内部类可以看作是外部类的一个成员,所以内部类也被称为“成员类”。

特点

  • 内部类可以拥有自己的成员变量与成员方法,通过建立内部类对象,可以访问其成员变量或者调用成员方法。通过建立内部类对象,可以访问其成员变量或者成员方法。
  • 在外部引用内部类时,则必须在内部类名前冠以其所属外部类的名称才能正常使用。在new运算符创建内部类时,也要在new前面冠以对象变量。
  • 内部类中不能定义静态成员
  • 内部类可以定义在外部类的方法外面,也可以定义在外部类的方法体
  • 在方法体外面定义的内部类的访问类型可以是public,protecte,默认的,private等4种类型,创建内部类的实例对象时,一定要先创建外部类的实例对象,然后用这个外部类的实例对象去创建内部类的实例对象
  • 方法内部定义的内部类前面不能有访问类型修饰符,就好像方法中定义的局部变量一样,但这种内部类的前面可以使用final或abstract修饰符。这种内部类对其他类是不可见的,其他类无法引用这种内部类,但是这种内部类创建的实例对象可以传递给其他类访问。

成员内部类

成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。如果要访问外部类的同名成员,需要使用下面的形式进行访问:

  • 外部类.this.成员变量
  • 外部类.this.成员方法

如果在外部类想要访问成员内部类的成员,必须先创建一个成员内部类的对象,在通过指向这个对象的引用来访问。创建成员内部类的对象,前提是必须存在一个外部类的对象。

例如使用下面两种方式创建内部类的对象:

第一种:Outter out = new Outter();             Outter.Inner in = out.new Inner();        //通过Outter对象来创建

第二种:Outter.Inner in = outter.getInnerlnstance();

内部类可以拥有private权限、protected权限、public权限以及包访问权限

public class Outter{

    private int age;                     //声明外部类的私有成员变量
    
    public class Student{                //声明内部类
        
        String name;                     //声明内部类的成员变量
        public Student(String n,int a){  //定义内部类的构造方法
            name = n;
            age = a;
        }
        public void output(){             //内部类的成员方法
            System.out.println("姓名"+this.name+"年龄"+"age");
        }
    }

    public void output(){             //外部类的成员方法
       Student stu = new Student("张三",24);
       stu.output();
    }

    public static void main(String[] args){
        Outter out = new Outter();
        out.output();    //用out调用外部类的方法
    }
}

局部内部类

局部内部类就像是方法里面的局部变量一样,是不能有public、private、protected以及static修饰符修饰的。

匿名内部类

匿名内部类是指可以利用内部类创建没有名称的对象,他一步完成了声明内部类和创建该类的一个对象,并利用该对象访问到类的成员。一般使用匿名内部类的方法来编写时间监听代码。

匿名内部类是唯一一种没有构造器的类,也是不能有访问修饰符和static修饰符的。

静态内部类

静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非静态成员变量或方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

编程芝士

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

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

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

打赏作者

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

抵扣说明:

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

余额充值