1.什么是抽象类,抽象类和普通类的区别?
只要满足被abstract类修饰的类就是一个抽象类。
.也就是说,抽象类可以没有抽象方法,可以没有任何一个抽象方法。
一个类要是有抽象方法那么这个类就必须是一个抽象类,即被abstract修饰。
也就是说抽象类只是比普通类多了一个abstract关键字,即不能创建对象,还有写不写抽象方法的选择,成员变量,构造方法等等它都可以有。
但是大多数情况下抽象类是都会有抽象方法的,比如JDK中的AbstractMap,抽象类设计主要是为了把共性的东西让子类去继承(成员变量和成员方法),把包含子类特性的方法定义成抽象的,让子类自己去发挥。
2.什么是接口?
广义的接口:对外提供规则的就是接口
java中的接口就是interface修饰的一个结构。
接口中的成员变量的缺省属性是static final
JDK1.8之前接口中的方法必须是抽象方法,即没有方法体,JDK1.8中的接口可以有default修饰的方法,有方法体。
default修饰的方法有什么特点?
1.因为接口不能被实例化,所以default方法跟普通方法没有什么区别,只是普通方法是父类提供给子类去直接使用的,默认方法是接口的方法是提供给实现它的类去使用的。
2.如果一个类实现了俩个接口,俩个接口中都有相同名称的default方法,那么编辑器就会提示你俩个接口中的默认方法重复了,推荐你去重写自己的方法,或者在重写方法中用 接口名.super.方法名()指定调用哪一个
3.如果一个类实现了多个同名的default方法的接口的同时,又继承了另一个有同名方法的类,那么编辑器就不会报错了,一定会调用类中的同名方法,因为继承的优先级高,简单来理解的话,我们在写代码时候也是先写extends再写implements的,不然编辑器就会报错。
3.抽象类和接口的区别
1.抽象类只能被类继承,接口既可以被接口继承,也能被类实现。
2抽象类中成员变量想定义什么样就定义成什么样,.接口中的成员变量只能是staic final的。
3.抽象类可以有抽象方法和成员方法和构造方法,接口中只能有抽象方法或者default方法。
4.从设计思想上来说,抽象类是就是用来被继承的,主要是提供共性的功能,强调这个类是什么,接口中主要是提供扩展功能,强调这个类又多了一些功能,举一个例子,比如有一个抽象类是动物类,猫类如果实现了动物类,那么就有了动物的共性功能,如果有一个接口是和人聊天的接口,里面有一个方法是和人聊天的抽象方法,如果猫类实现了这个接口,即重写了和人聊天的方法,等于说猫学会了和人聊天(扩展)。