抽象类
抽象方法
抽象方法就是指不能被具体实现的方法,也就是没有方法体,并且使用abstract关键字修饰;
语法格式:
访问修饰符 abstract void show();
抽象类
抽象类就是指使用abstract关键字修饰的类,抽象类不能被实例化对象。
注意事项
1.抽象类中可以有成员变量、成员方法以及构造方法;
2.抽象类中可以有抽象方法,也可以没有;
3.拥有抽象方法的类必须是抽象类,因此通常情况下拥有抽象方法并且有abstract;
关键字修饰的类才认为是真正的抽象类;
实际意义
抽象类的意义不在于实例化而在于被继承,若一个类继承自抽象类则必须重写抽象方法,否则该类也得变成抽象类。
因此,抽象类对子类具有强制性和规范性,叫作模板设计模式。
*经验分享:
在以后的开发中推荐使用父类引用指向子类的对象形式,因为父类的引用直接调用的方法一定是父类拥有的方法,当需要更换指向子类对象的时候,只需要将new后面的该方式类型更改一下就可以了,其他的代码无需改动,因此提高了代码的可维护性和可扩展性。
该方式的缺点在于:父类的引用不能直接调用子类独有的方法,若调用则需要强制类型转换。
接口
基本概述
接口就是一种比抽象类还抽象的类,该类型不能实例化。
定义类的关键字是class 而定义接口的关键字是interface
继承类的关键字是extends,而实现接口的关键字是implements
当多个类型之间具有相同的行为能力的时候,java中就可以通过接口进行类型之间的联系。
通过接口可以解决java中单继承所带来的一些类型无法构成问题。
接口定义了某一些规范,并且需要去遵守
接口不关心类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供的某些方法。
语法格式
修饰符 interface 接口名称 [extends 父接口1,父接口2,......]{
零个到多个常量的定义
零个到多个抽象方法的定义
零个到多个默认方法定义(jdk1.8新特性)
零个到多个静态方法的定义(jdk1.8新特性)}
注意事项
1.接口可以实现多继承,也就是说一个接口可以同时继承多个父接口。
2.实现接口的类如果不能实现所有接口中待重写的方法,则必须设置为抽象类。
3.一个类可以继承自一个父类,同时实现多个接口
4.接口中的所有成员变量都必须由public static final 共同修饰,也就是常量。
5.接口中所有成员方法必须由public abstract 共同修饰,也就是抽象方法。
类和接口之间的关系
类和类之间采用继承的关系 使用extends关键字 支持单继承
类与接口之间采用实现的关系 使用implements关键字 支持多实现
接口与接口之间的关系采用继承的关系 使用extends关键字 通常认为支持单继承
抽象类和接口的主要区别(笔试题)
1.定义抽象类的关键字是class,而定义接口的关键字是interface
2.继承抽象类的关键字是extends,而实现接口的关键字是implements
3.继承抽象类支持单继承,而实现接口支持多实现
4.抽象类有构造方法,但是接口没有
5.接口中的所有成员变量都必须是常量,而抽象类中可以是变量
6.接口中的所有成员方法都必须是抽象方法,而抽象类中可以是普通方法
7.接口中增加方法一定影响子类,而抽象类中可以不影响