Java笔记 - 抽象类和接口之间的区别与联系

抽象类

抽象方法

	抽象方法就是指不能被具体实现的方法,也就是没有方法体,并且使用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.接口中增加方法一定影响子类,而抽象类中可以不影响