在eclipse的使用使用中会有些抽象的用法,举个例子,人,“人”是比较抽象的,怎么样才算是“人”呢?会说话是个“人”吗,会跑步是个“人”吗等等,因为这些都是人的特征,所以就有抽象出了“人”的概念
抽象类
- 概念:使用abstract修饰,继承时使用extends,由于类是抽象的,所以不能创建对象,同时,在类的内部的抽象方法无方法体并且要由子类去实现
- 格式:
abstract class 类名{
权限修饰词 abstract 返回值类型 类名();
} - 抽象类与普通类的区别:
(1) 抽象类必须用public或protected修饰(若为private修饰,无法被子类继承,从而无法实现其抽象方法,在默认情况是public)
(2) 若子类继承了该抽象类则必须要实现抽象类中的抽象方法,否则要将其子类也要定义为抽象类
那接口是什么呢?其实接口就相当于某团体具备着共同的特征或行为,举个例子,当我们去银行取钱的时候,会有不同的窗口,这些不同的窗口都可以帮你办理业务,因为他们有共同的任务,只不过由不同的窗口去实现
接口
- 概念:使用interface修饰,继承时用implements,由于接口不能有具体的特征,要靠继承的子类去实现,就好像公务员是一个职位,但不同的公务员负责不同的工作
- 格式:
interface 接口名称{
数据类型 数据名称; //表示为全局常量
权限修饰词 返回值类型 方法名(); //表示抽象方法
} - 继承时,接口可以实现多个实现:
class 子类 implements 接口1,接口2…{
}
在与类的继承一起使用时:
class 子类 extends 父类 implements 接口1,接口2…{
} - 注意:
(1) 接口中可拥有变量和方法,但是,不能在接口内部实现,只能由子类实现
(2) 当接口中有public static final时,则修饰的变量变为常量
(3) 当接口要使用时,必须通过子类的继承,由子类实现抽象方法的进行使用(当子类为抽象类时,则仍需要抽象类的子类进而实现类与接口中的全部抽象方法)
抽象类与接口的异同之处
-
相同点:
(1) 两者均不能被实例化
(2)两者的抽象方法中均不能有具体的实现 -
不同点:
(1) 一个类只能继承一个类,而接口可以是多个,比如:
在类的继承中:
class 子类 extends 父类 {
}
这种继承的方法是正确的
class 子类 extends 父类1,父类2,… {
}
这种是错误的,子类只能有一个父类,就好比一个儿子只能有一个亲爹而接口: class 子类 implements 接口1,接口2,...{ } 对接口继承的理解就好比,一个儿子可以有好多个干爹
(2) 在定义时,接口中的变量是公共静态变量(但不能是具体的),而抽象类的是普通变量(可以是具体的)
(3) 在抽象类中可以有在内部的具体实现方法(指的是普通方法),而在接口中不能有具体的方法(只能有抽象方法)