javaSE 笔记 各种内部类

类名作为形参和返回值

其实需要的都是该类的对象。由此引申出一个问题,如果是抽象类,那不能实例化对象,就只能采用多态的思想,定义一个子类,生成一个子类对象作为参数或返回值。

接口名作为形参和返回值

与抽象类同样,因为接口也是不能实例化对象的,只能参考多态,定义实现类,创建实现类对象,作为形参和返回值。

内部类

在一个类中定义一个类

public class Outer{
      public class Inner{
    }
}

Inner就被称为内部类,内部类的访问特点:内部类可以直接访问外部类的成员,包括私有
外部类要访问内部类的成员,必须创建内部类对象

成员内部类和局部内部类

在类的成员位置:成员内部类
在类的局部位置:局部内部类
关于外界如何创建对象使用成员内部类,示例: 外部类名.内部类名 对象名 = 外部类对象.内部类对象
即: Outer.Inner oi = new Outer().new Inner()
但是上面这种操作只适用于内部类的修饰符是public,万一是private,就不能这么写了
如果是private,就得在定义外部类的时候,提供访问内部类的方法,然后外界就只需要通过访问外部类的方法去访问内部类。
其实和类的private属性一样,定义一种getName和setName之类的方法。。

局部内部类也是同样,是一个在成员方法中的类,同样的外界是不能直接访问的,只能在方法中先定义内部类的对象,再根据对象调用内部类方法,最后外界才可以间接地通过外部类的方法访问方法中的内部类。

匿名内部类

局部内部类的一种特殊形式,前提:存在一个类或者接口,这里的类可以是具体类也可以是抽象类。格式如下:

new 类名或者接口名(){
      重写方法;
};

看起来相比于直接创建一个对象,匿名内部类主要就是重写了一个方法。
本质是继承了该类或实现了该接口的子类匿名对象。本质是对象,就是省得给类对象取名字呗。

而且不需要重新定义一个类去继承抽象类或者实现接口,再新建对象,再重写方法等等。这样直接跳到了新建对象,重写方法,进而调用方法。

在开发中的使用:后面的课程证明了我前面的想法,真的就是省去创建子类那么麻烦的事。

jo.method(new Jummping(){ 
    @override
    publish void jump(){
    System.out.println("狗可以跳高了")  
}
})
posted @ 2021-08-19 14:01  Lanezzz  阅读(37)  评论(0)    收藏  举报