Java内部类

一:内部类

1.内部类是什么?

内部类是定义在一个类里面的类,里面是类可以理解成(寄生),外部类可以理解成(宿主)。

public class People{
    //内部类
    public class Heart{
    }
}

2.内部类的使用场景、作用

场景

当一个事物的内部,还有一部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构可以选择使用内部类来设计;

  • 比如:你定义了一个汽车类,这个汽车类里面可能要有一个发动机类,而系统又要关心发动机类的信息,那就可以将发动机类定义在汽车类内部。这就叫做内部类;
  • 比如:你定义了一个人的类,那是不是要关心人的心脏的信息数据,那么这个心脏类就可以定义成内部类。

作用

内部类通过可以方便访问外部类的成员,包括私有的成员;

内部类提供了更好的封装性,内部类本身就可以用proivate protected等修饰,封装性可以做更多控制。

3.内部类的分类

静态内部类[了解即可]

成员内部类(非静态内部类)[了解即可]

局部内部类[了解即可]

匿名内部类[重点了解]

4.静态内部类[了解]

有static修饰,属于外部类本身。

它的特点和使用与普通类完全是一样的,类有的成分它都有,只是位置在别人里面而已。

public class Outer{
    //静态成员内部类
    public static class Inner{
    }    
}

静态内部类中可以直接访问外部类的静态成员,外部类的静态成员只有一份可以被共享访问。

 静态内部类不可以直接访问外部类的实例成员,外部类的实例成员必须用外部类对象访问,只属于外部类对象本身。

总结:静态内部类的使用场景、特点、访问总结:

场景:如果一个类中包含了一个完整的成分,如汽车类中的发动机类;

5.成员内部类 [了解]

无static修饰,属于外部类的对象;

jdk16之前,成员内部类中不能定义静态成员,jdk16开始也可以定义静态成员了

public class Outer{
//成员内部类
    public class Inner{
    }
}

6.局部内部类[了解]

局部内部类放在方法、代码块、构造器等执行体中;

局部内部类的类文件名为:外部类$N内部类.class。

7.匿名内部类[重点]

本质上是一个没有名字的局部内部类,定义在方法中、代码块中、等。

作用:方便创建于子类对象,最终目的为了简化代码编写。

格式:

new 类|抽象类名|接口名(){
    重写方法;
};
Employee a = new Employee(){
    public void work(){
    }
};
a.work();
public class Test {
    public static void main(String[] args) {
        Animal a1 = new Dog();      //之前的形式
        a1.run();
    }
}
//狗子类
class Dog extends Animal{
    @Override
    public void run() {
        System.out.println("狗怒吃答辩");
    }
}
//动物父类
abstract class Animal{
    public abstract void run();
}

控制台输出结果:

匿名内部类形式:

public class Test {
    public static void main(String[] args) {
        Animal a1 = new Animal() {//匿名内部类形式:
            @Override
            public void run() {
                System.out.println("狗吃饱了");
            }
        };      //之前的形式
        a1.run();
    }
}
//动物父类
abstract class Animal{
    public abstract void run();
}

控制台输出结果:

特点总结:

匿名内部类是一个没有名字的内部类;

匿名内部类写出来就会产生一个匿名内部类的对象;

匿名内部类的对象类型相当于是当前new的那个的类型的子类类型。

匿名内部类的作用是什么?

方便创建子类对象,最终目的为了简化代码编写。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值