一、抽象类与抽象方法
1、定义:
1)抽象方法:
a、在抽象类中被创建,只定义而不实现,由子类重写的方法。
b、只能方法头,没有方法体。即不存在方法头后没有{ }
2)抽象类:
a、只声明而不实现的类。
b、抽象类中可以有抽象方法,也可以有非抽象的方法。
2、格式:
定义抽象类:
在class前加上abstract
abstract class 类名{
类体
}
3、异同:
1)抽象类和抽象方法都必须使用abstract进行修饰
2)抽象方法不能使用private和static进行修饰,
因为被private和static修饰后的方法不能被子类重写,
而抽象方法要求子类的重写。
3)抽象类只能被继承。
所以抽象类不能被实例化,也不可以使用new来调用去创建实例。
4)“
含有抽象方法的类只能被定义为抽象类。
(包括继承了抽象父类但未完全实现父类的抽象方法;
直接定义了抽象方法;
实现了接口,但未完全实现接口中的抽象方法)
”
二、接口
1、定义:
1)本质是一个抽象类,是一个特殊的抽象类。
2)其中所有的方法没有方法体。
3)接口文件的文件名必须与接口名相同。
2、格式:
[修饰符] interface 接口名{
}
3、继承
1)接口可以被其他接口继承,且是多继承的。【类是单继承的】
2)继承时使用extends关键字,且继承后接口中的方法都是没有实现的。
4、实现
1)接口可以被类实现,且必须实现接口中的抽象方法。
2)实现时使用implements关键词。
class 类名 implements 接口列表{
}
三、接口与抽象类的异同
1)同:
a、都无法被实例化,但能被其他类实现。
b、都包含抽象方法,实现接口或继承抽象类时必须实现这些方法。
2)异:
a、接口中只能包含抽象方法;抽象类中既可以有抽象方法,也可以有非抽象方法(普通方法)。eg、静态方法
b、接口中的所有属性都是静态的;抽象中既可以用静态,也可以用非静态。
c、接口是不含构造方法的;抽象类可含构造方法。
d、一个类只能有一个父类,但可以拥有多个接口。
四、接口回调
1、接口也可以作为Java中一种数据类型,是一种引用变量。
2、接口变量:
1)定义:使用接口声明的变量。
2)可以存放接口的类的实例的引用,即存放对象的引用。
3、接口回调:
“把实现某一接口的类所创建的对象的引用赋值给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口方法。”
4、接口实现的多态:
“指不同的类在实现同一个接口时可能具有不同的表现形式。”