抽象类和接口
本章目标
1、了解抽象类和普通类的的区别
2、会使用抽象类的抽象类方法
3、会定义接口、了解接口的含义和作用【难点】
一、了解抽象类和普通类的的区别
抽象类不是一个完整的类,它一般被用作于基类。在完整对象方法中 抽象类主要用来进行类型隐藏和充当全局变量的角色。
public abstract class 类名{
}
一、抽象类的注意事项
-
抽象类不能进行实例化,不能进行对象创建。(未来可以通过匿名类来创建它的对象)
1、语义上。自然界不存在这具体的东西,没有哪个水果可以代替”水果”这个名词,没有哪个宠物可以代替”宠物”这个名词,所以它只能是作为一个分类名词用,创建动物/宠物的实例?不存在此情况。
2、语法上。如果可以实例化,其包含的抽象方法,在运行程序时,JVM无法执行该方法,因为方法没有方法体。
3、一般作为基类也不需要进行使用。
-
抽象类可以作为多态使用。例如:Motor motor=new Car();
-
抽象类中可以有抽象方法,也可以没有抽象方法。但是有抽象方法的类一定是抽象类。
-
抽象类为父类时,子类必须要重写父类中的所有抽象方法,否则其也需要定义为抽象类(父债子偿)
二、会使用抽象类的抽象类方法
//抽象方法没有方法体 目前你掌握抽象方法只需要在此方法实现不确定时使用即可
//构造方法不能抽象 静态方法也不允许抽象
访问修饰符 abstract 返回值类型 方法名(参数列表);
三、会定义接口、了解接口的含义和作用【难点】**
interface接口
UI:User Interface
GUI:图形界面接口
API:应用程序接口
接口:(物理接口):USB接口、网线接口、电源接口、网线接口
这些接口值得就是一些物理设备提供出来的一个其他外设的连接入口。
接口(第三方接口,程序接口):开发一个天气APP(天气数据来源天气气象局)、开发了一个APP需要支付的能力(接入微信支付、支付宝支付)、开发一个APP需要地图功能(接入百度地图、腾讯地图、高德地图)
微信开放平台、微信开发平台、微信支付开放平台、百度地图开放平台、蚂蚁金服开放平台、微博开放平台。
接口(java interface):有些时候和上述接口也有相关联的地方
它是一种引用数据类型(特殊的类型)、为了补全单继承的缺陷。
我们Java中开发一个类,单继承(继承一个类)多实现(继承多个接口)
public interface 接口名{
//属性
//方法
}
接口注意事项:
- 接口中的属性默认都是 静态 常量(static final),而且权限修饰符为public
- 接口中的方法都是{jdk8以后出现了default关键词}公共的抽象方法。(public abstract)
- 接口不能实例化,但是也可以作为子类的引用(多态),未来也可以使用匿名内部类来创建所谓的对象。(抽象类一致)
- 一个类可以实现多个接口
- 接口直接也可以继承(extends)
需求:实现防盗门功能
发现的类有:
-
门类
-
- 开门
- 关门
-
锁类
-
- 上锁
- 开锁
-
防盗门类,无法同时继承门类和锁类,并且防盗门 is a 门,(但是防盗门 has a 锁)
is a的关系一般使用extends,has a的关系一般使用接口(implements interface)
抽象类和接口区别【面试题】
-
相同点
-
代表系统的抽象层
-
都不能被实例化
-
都能包含抽象方法
(用于描述系统提供的服务,不必提供具体实现)
-
-
不同点
-
在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法
(抽象类便于复用,接口便于代码维护)
-
一个类只能继承一个直接的父类,但可以实现多个接口
-
补充**:final(最终)的补充【面试题】
- final修饰了变量,变量就成为了常量。
- final修饰类,意味着此类将无法被继承(断子绝孙)
- final修饰方法,无法被子类重写