思考:
1、抽象类有何特征?
抽象类的特点:
1、修饰符:必须通过 abstract 关键字来进行修饰。
公式1:(修饰类)修饰符abstract class 类名{}
公式2:(修饰成员方法)修饰符 abstract 返回类型 方法名()
2、抽象类不能被实例化,只能通过创建子类对象。(抽象的意思就是不具体,所以不能 new )
3、抽象类子类的两个选择:
- 重写父类的所有抽象方法
- 把类定义为抽象类
抽象类成员的特点:
1、成员变量:
可以有普通的成员变量
也可以有成员常量
2、成员方法:
可以有普通方法,也可以有抽象方法
可以既可以有抽象方法,也可以有非抽象方法
有构造方法并且构造方法可以重载
2、接口的定义和实现有哪些注意问题?
1.关于Java中接口的定义与使用
Java中使用接口是为了克服单继承的限制。一个类可以有多个父接口,它们之间用逗号隔开。接口中的变量默认使用”public static final” 来修饰,即全局常量;接口中定义的方法默认使用”public abstract”来修饰,即抽象方法。如果接口声明为public,则接口中的变量和方法全部为public。
由于接口中的方法都是抽象方法,因此不能通过实例化对象的方式来调用接口中的方法。此时需要定义一个类,并使用implements关键字实现接口中的所有方法。一个类可以在继承另一个类的同时实现多个接口,这些接口要使用英文逗号隔开。接口的实现类声明格式如下。
[<修饰符>] class <类名> [extends] <超类名>] [implements <接口1>,<接口2>,’’’’’’’’,<接口n>]
下面对接口的特点进行归纳一下:
①接口中的方法都是抽象的,不能实例化对象。
②接口中的属性只能是常量。
③当一个类实现接口时,如果这个类时抽象类,则实现接口中的部分方法即可,否则需要实现接口中的所有方法。
④一个类通过implements关键字实现接口时,可以实现多个接口,接口之间用逗号隔开。
⑤一个接口可以通过extends关键字继承多个接口,接口之间用逗号隔开。
⑥一个类在继承另一个类的同时还可以实现多个接口。
⑦抽象类中有构造器,但是接口没有。
2.接口的修饰符
关于哪些修饰符可以修饰接口:
①public修饰符可以修饰接口;
②不添加修饰符(这时候接口的修饰符虽然没有显示,但是其实是default)。
③外部接口和类不能被private和protected修饰,但内部接口和内部类可以被四种访问修饰符修饰。
3.Java8的新特性:接口的默认方法&静态方法
3、抽象类和接口的使用差异?
抽象类表达概念上的抽象;
接口表达功能上的抽象,接口中含有若干方法。
共同点:
都是上层的抽象层; 都不能被实例化; 都包含抽象的方法。
区别:
抽象类可写非抽象方法,避免子类中重复书写,提高代码复用率;接口中只能有抽象方法。
一个类只能继承一个直接父类(可是具体类或抽象类),一个类可实现多个接口(多继承)。
用途:
抽象类充当公共类的角色,不适用于日后重新代码修改;接口运用于实现比较常用的功能,便于日后维护或添加删除方法。
4、内嵌类有何特点?
第一个特点,内部类可以访问其所在类的私有属性和方法。这一点就很像孕妈妈肚里的小宝宝一样,可以很方便的吸收一些妈妈的营养。以 HashMap 为例,它里面有好几个内部类。观察这几个内部类你会发现有一个共同特点就是内部类可以很方便的访问所在外部类的一些私有属性和方法。如果你把链表给抽取出来,你会发现,最终的链表实现起来难了很多。
第二个特点,内部类可以隐藏起来,不被同一个包中的其他类访问,如果一个类只对某个类提供使用,那么可以将其定义为内部类。这个特点在 HashMap 等集合中也有体现,具体来说就是各个内部类都是辅助所在的外部类的。作为外部类的一部分,具有强关联性。并且不希望除了所属的外部类使用外的其他类进行访问。
第三个特点,可以联合外部类解决多继承问题。这也是我认为非常重要的一个特点。还是以 HashMap 为例,它本身继承了 AbstractMap。但是它的所有内部类,都又有了各自的继承。
5、内嵌类有哪些形式?
成员类、静态内嵌类、方法中的内嵌类和匿名内嵌类