java基础:10、普通类和抽象类之间的区别?接口和抽象类之间的区别?抽象类必须要有抽象方法吗?抽象类能使用final修饰吗?(超级详细)

1、普通类和抽象类之间的区别?

抽象类是包含抽象方法的类,其中的某些方法声明为abstract来表示一个类是抽象类。抽象类是一种模板模式,子类可以在这个模板上进行扩展。抽象类的存在还可以避免子类设计的随意性。实现了代码设计与实现的分离。

(1)抽象类不可以被实例化,不可以new一个实例化对象。
(2)只要有抽象方法的类,必须定义成抽象类。
(3)抽象类可以包含属性、方法、构造方法。但是构造方法只能被子类调用,不可以用来实例化对象。
(4)抽象类只能用来继承,并且子类必须重写其抽象方法,除非子类自身也是抽象类。

注:抽象类中可以有普通方法。抽象方法只有方法声明,没有方法体。

2、接口和抽象类之间的区别?

接口和抽象类是支持抽象类定义的两种机制。
抽象类是包含抽象方法的类,其中的某些方法声明为abstract来表示一个类是抽象类。
接口是指一个方法的集合,其中所有的方法都没有方法体,通过关键字implements来实现。接口中只有常量和抽象方法。
相同点(2点):
(1)抽象类和接口都不能被实例化。
(2)抽象类的子类和接口的实现类都只有在实现了抽象类或者接口中的方法之后才可以被实例化。

不同点(6点):
(1)方法的定义与实现。
java8之前,接口只能定义方法,不能实现,只有实现接口的实现类可以实现方法。但是抽象类中的方法可以有定义+实现。
(2)实现与继承。
接口实现用implements,抽象类只能用继承extends。一个类可以实现多个接口,但是只能继承一个抽象类。因此接口可以间接达到多重继承的目的。
(3)设计理念。
接口强调功能的实现,设计理念:has——a;抽象类强调所属关系,设计理念:is——a。
(4)成员变量的不同点。
接口中成员变量默认为public static final,只能有静态的不能被修改的数据成员,而且必须给其赋初始值。
抽象类可以有自己的数据成员变量。抽象类中的成员变量默认为default,当然也可以被定义为public、protected和private,这些成员变量可以在子类中被重新定义,也可以被重新赋值。
(5)成员方法的不同点。
接口中的成员方法都只能是public abstract的,且只能被这两个关键字修饰。
抽象类中可以有非抽象的成员方法。抽象类的抽象方法(前有abstract修饰)不能用private、static、synchronized、native等修饰符修饰。同时必须以分号结尾,不能有花括号。
(6)应用方面。
接口被运用于比较常见的功能,便于日后维护或者增加删除方法。
抽象类更倾向于充当公共角色,不适用于日后重新对里面的代码进行修改。

其他说明:
接口是一种特殊的抽象类。接口可以继承接口。
抽象类可以实现接口,抽象类也可以继承具体类。抽象类可以有静态的main方法。

3、抽象类必须要有抽象方法吗?

(1)抽象类一定有abstract修饰。
(2)抽象类不一定要有抽象方法。
(3)有抽象方法的类一定是抽象类。

4、抽象类能使用final修饰吗?

不可以。
用final修饰的类不可以被继承。
抽象类是一种模板模式,子类可以在这个模板上进行扩展。抽象类的存在还可以避免子类设计的随意性。实现了代码设计与实现的分离。就是要通过子类的继承实现其中的抽象方法。而final修饰抽象类的做法违背了抽象类的初衷。

发布了57 篇原创文章 · 获赞 13 · 访问量 1133

猜你喜欢

转载自blog.csdn.net/weixin_42924812/article/details/105053433