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("狗可以跳高了")
}
})

浙公网安备 33010602011771号