唠唠SE的面向对象-11——内部类

论坛 期权论坛 脚本     
匿名技术用户   2020-12-28 14:01   11   0

11. 内部类

将类定义在另一个类的内部则成为内部类。

在一个类中,定义在类中的叫成员变量,定义在函数中的叫成员函数,那么根据类定义的位置也可以分为成员内部类和局部内部类。

内部类生产的class文件为 “外部类$内部类.class”,为了标明该内部类是属于具体哪个外部类。

1. 内部类可以直接访问外部类的成员属性。(孙悟空相当于内部类飞到铁扇公主的肚子里面去)。

2. 外部类需要访问内部类的成员属性时需要创建内部类的对象。

1)在外部类的成员函数中创建内部类的对象,通过内部类对象直接访问内部类的成员。

2)在其他类中直接创建内部类的对象。

(由于此部分用的很少,就不贴代码啦 ̄へ ̄。。。)

什么时候使用内部类呢?

当我们分析事物时,发现事物的内部还有具体的事物,这时则应该定义内部类了。

比如人体是一个类,人体有心脏,心脏的功能在直接访问人体的其他内容。这时就将心脏定义在人体类中,作为内部类存在。

(由于此部分用的很少,就不贴代码啦 ̄へ ̄。。。)

内部类的优势:

成员内部类作为外部类的成员,那么可以访问外部类的任意成员。

1. 私有的成员内部类

特点:不能在其他类中直接创建内部类对象来访问

2. 静态的成员内部类

特点:如果内部类中包含有静态成员,那么内部类必须声明为静态内部类的形式:

匿名内部类:

没有名字的类,这种类必须重写一个类或继承一个抽象类或实现一个接口,用于精简代码。

之前说过抽象类和接口不能创建对象,但其实可以用匿名内部类创建对象,只需要在new的时候实现接口或抽象类中未实现的方法即可。

匿名内部类用的还是蛮多的,咱举个栗子:

abstract class Animal {
    public abstract void say();
}

public class Test1 {
    public static void main(String[] args) {
        Animal animal = new Animal() {
            @Override
            public void say() {
                System.out.println("不知名动物在嘶喊。。。");
            }
        };
        animal.say();
    }
}

转载于:https://my.oschina.net/LinkedBear/blog/1615278

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP