目录
一.抽象类
1、
抽象类的定义
类和类之间具有共同特征,将这些共同
特征提取
出来,形成抽象类。
2、
抽象类无法创建对象
使用抽象类时,写代码可以使用
多态
(父类型引用指向子类型对象)
3、抽象类
的
包含
内容
① 一般方法、静态方法和
抽象方法
,且抽象方法必须在抽象类中
②
静态变量
和成员变量
abstract class AbstractTest01{
int a; // 成员变量
static int b; // 静态变量
public abstract void doSome(); // 抽象方法(只有行为的概念,没有具体的行为实现)
public void doAnother(){ // 普通方法
......
}
public static void doOther(){ // 静态方法
......
}
}
4
、注意
抽象类
中,可以
有构造方法,
是供子类创建对象时,初始父类成员使用的。
抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
抽象类的子类,必须重写抽象父类所有的抽象方法。
二.接口
接口是特殊的抽象类,即只包含抽象方法的抽象类。
Public static final int speed =100;
Public void run();
1、接口的概念
接口是一种公共的规范标准。只要符合标准,就可以大家通用。
例:生活中的电源插座当中的电源接口,U盘,打印机,USB小风扇
接口可看作特殊的抽象类(接口是完全抽象,抽象类是半抽象)。接口是一种引用数据类型,编译后也是一个
.class
字节码文件。
2、接口的定义
-
public
interface
接口名称{
-
//接口内容
-
}
3、接口可以实例化对象吗?
由于接口是抽象类的特例,因此接口中也无法实例化和创建对象。使用接口时,写代码可以使用多态(父类型引用指向子类型对象),这里即接口作为父类。
4、接口中的包含内容
Java7:包含抽象方法和常量。
Java8:包含抽象方法,常量,默认方法,静态方法。
Java9:包含抽象方法,常量,默认方法,静态方法,私有方法。
接口中的方法默认是 public abstract 类型,可省略;
接口中的变量默认是 public static final 类型,可省略。
5、注意
当一个非抽象类实现接口,必须将接口中所有的抽象方法全部重写。
接口支持多继承,一个接口可以继承多个接口,一个类可以同时实现多个接口。
三、抽象类和接口之间的区别
比较点 |
抽象类 |
接口 |
变量 |
无限制 |
必须是public,static和final |
构造方法 |
子类通过构造方法链调用构造方法 |
没有构造方法 |
方法 |
既可以含普通方法也可以含抽象方法 |
只能含抽象方法,且必须是public的 |
关键字 |
abstract class |
interface |
称呼 |
拓展时用extends关键字,称之为继承 |
Implements,称之为实现 |
继承/实现 |
只能被类或抽象类继承 |
既可以被接口继承,也能被类或抽象类实现。 |
多重继承 |
不支持 |
可以继承多个父接口 |
定义抽象类的关键字是abstract class,而定义接口的关键字是interface。
public interface E{
public abstract String howToEat( );
}
继承抽象类的关键字是extends,而实现接口的关键字是implements。
继承抽象类支持的是单继承,而实现接口可以多实现。
public interface MyInterfaceB {
public abstract void methodB();
public abstract void methodCommon();
}
抽象类中可以有构造方法,而接口不可以有构造方法。
interface A{
public A( ) {//错误写法Interfaces cannot have constructors
}
void doSome();
}
抽象类变量没有限制,而接口中必须是public,static和final。
四.抽象类和接口的相同点
1.都不能被实例化
2.都能包含抽象方法
五.何时用抽象类?何时用接口?
抽象类一般是对“特征”的抽象。
接口一般是对“行为”的抽象。
通常,推荐使用接口而非抽象类,因为接口可以为不相关类定义共同的父类型,接口比类更加灵活。
抽象类适合用来定义某个领域的固有属性,也就是本质,接口适合用来定义某个领域的扩展功能。