
一.抽象类:
1.什么是抽象类
类和类之间具有共同特征,将这些共同特征提取出来。形成的就是抽象类。类本身不存在,所以抽象类无法创建对象.

抽象类无法实例化创建对象,为什么?
抽象类是类和类之间共有的特征,将这些具有共同特征的类在进一步抽象形成抽象类,由于类本身是不存在的,所以抽象类无法创建对象。
2.抽象类属于什么类型
抽象类是属于数据引用类型。
3.抽象类怎么定义
语法:
[修饰符列表] abstract class 类名{
类体;
}
4.一些概念
- 抽象类是无法实例化的,无法创建对象的,所以抽象类是用来被继承的
- final和abstract是不能联合使用的,这两个关键字是对立的
- 抽象类的子类可以是抽象类
- 抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的
- 抽象类关联到一个概念:抽象方法。什么是抽象方法呢?
抽象方法表示没有实现的方法
- 特点一:没有方法体,以分号结尾
- 特点二:前面修饰符列表中有abstract关键字
- 抽象类中不一定有抽象方法,但抽象方法必须出现在抽象类中。
- 一个非抽象的类继承抽象类,必须将抽象类中的抽象方法实现/重写/覆盖。

二.接口
1.接口的基础语法
- 接口也是一种引用数据类型,编译之后也是一个.class字节码文件
- 接口是完全抽象的(抽象类是半抽象)或者也可以说接口是特殊的抽象类
- 接口怎么定义,语法是什么?
[修饰符列表] interface 接口名() - 接口支持多继承,一个接口可以继承多个接口
- 接口中只包含两部分内容:常量、抽象方法
- 接口中所有元素都是public修饰的(都是公开的)
- 接口中的抽象方法定义时,public abstract修饰符可以省略
- 接口中的方法都是抽象方法,所以接口方法中不能有方法体
- 接口常量中的public static final可以省略
注意:(1)类和类之间叫做继承,接口和接口之间叫做实现。别多想,仍然可以将“实现”看作“继承”。继承使用extends关键字完成,实现使用关键字implements完成
(2)当一个非抽象类实现接口的话,必须将接口的所有方法实现(覆盖/重写) - 一个非抽象的类。实现接口的时候,必须将接口的所有方法实现
- 一个类可以实现多个接口
- 使用接口,可以使用多态
例子一:接口多态联合使用
public class Test01{
public static void main(String[] args){
//错误:Mymath是抽象的无法实例化
//new Mymath();
//能使用多态吗?
//可以
//Animal a = new Cat();
//父类型的引用指向子类型的对象
Mymath mm = new MymathImpl();
//调用接口里面的方法(面向接口编程)
int result1 = mm.sum(10,20);
System.out.println(result1);
int result2 = mm.sub(20,10);
System.out.println(reault2);
}
}
//特殊的抽象类,完全抽象的,叫做接口
interface Mymath{
double PI = 3.1415926;
int sum(int a, int b);
int sub(int a, int b);
}例子二:一个类可以实现多个接口
interface A{
void m1();
}
interface B{
void m2();
}
interface C{
void m3();
}
class D implements A,B,C{
//实现接口A的m1()
public void m1(){
}
//实现接口B的m2()
public void m2(){
}
//实现接口C的m3()
public void m3(){
}
}注意:一个类可以同时实现多个接口,这种机制弥补了java中类和类只支持单继承,实际上单继承是为了简单而出现的,但现实中存在多继承,java中的接口弥补了单继承带来的缺陷
接口A和接口B之间没关系,也可以强转,编译过程不报错,运行时可能会出现ClassCastException异常。编译没问题,运行结果有问题,像之前一直一样,需要先 if + instanceof 进行判断。
例子三:继承和实现都存在的话怎么写?
extends关键字在前,implements关键字在后
public class Test02{
public static void main(String[] args){
}
}
//动物类:父类
class Animal{
}
//可飞翔的接口(是一对翅膀)
interface Flyable{
void fly();
}
//动物子类:猫类
//Flyable是一个接口,是一对翅膀的接口,通过接口插到猫身上,让猫变得可以飞翔
class Cat extends Animal implements Flyable{
















