本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一、抽象类
- 当一个类中包含了抽象方法,该类必须使用abstract关键字来修饰,使用abstract关键字修饰的类为抽象类。
- 抽象类可以不含任何抽象方法,只需使用abstract关键字修饰即可。
- 抽象类是不可以实例化的,因为抽象类中有可能包含抽象方法,抽象方法是没有方法体的,不可以被调用。
- 如果想调用抽象类中定义的方法,则需要创建一个子类,在子类中将抽象方法实现。
案例:
//定义抽象类Animal
abstract class Animal07 {
//定义抽象方法 shout()
abstract void shout();
}
//定义 Dog类继承抽象类 Animal
class Dog07 extends Animal07 {
//实现抽象方法 shout()
void shout(){
System.out.println("汪汪……");
}
}
//定义测试类
class ExampleA07 {
public static void main(String[] args) {
Dog07 dog07=new Dog07();
dog07.shout();
}
}
二、接口
- 接口中的变量默认使用“public static final”来修饰,即全局常量
- 类与接口之间的实现关系
案例:
//定义了 Animal接口
interface AnimalI08 {
int ID=1; //定义全局常量
void breathe(); //定义抽象方法 breathe()
void run(); //定义抽象方法 run()
}
//Dog类实现了 Animal接口
class Dog08 implements AnimalI08 {
@Override
public void breathe() {
System.out.println("狗在呼吸");
}
@Override
public void run() {
System.out.println("狗在跑");
}
}
//定义测试类
class ExampleA08 {
public static void main(String[] args) {
Dog08 dog08 =new Dog08();
dog08.breathe();
dog08.run();
}
}
- 接口之间的继承关系
案例:
//定义了 Animal接口
interface Animal09 {
int ID=1; //定义全局常量
void breathe(); //定义抽象方法 breathe()
void run(); //定义抽象方法 run()
}
//定义了 LandAnimal接口,并继承了 Animal接口
interface LandAnimal extends Animal09 { //接口继承接口
void liveOnLand(); //定义抽象方法 liveOnLand()
}
//定义 Dog类实现 LandAnimal接口
class Dog09 implements LandAnimal {
@Override
public void breathe() {
System.out.println("狗在呼吸");
}
@Override
public void run() {
System.out.println("狗在跑");
}
@Override
public void liveOnLand() {
System.out.println("狗生活在陆地上");
}
}
//定义测试类
class ExampleA09 {
public static void main(String[] args) {
Dog09 dog09 = new Dog09();
dog09.breathe();
dog09.run();
dog09.liveOnLand();
}
}
- 接口特点:
①接口中的方法都是抽象的,不能实现实例化对象。
②当一个类实现接口时,如果这个类是抽象类,则实现接口中的部分方法即可,否则需要实现接口中的所有方法。
③一个类通过implements关键字实现接口时,可以实现多个接口,被实现的多个接口之间要用逗号隔开。
④一个接口可以通过extends关键字继承多个接口,接口之间用逗号隔开。
⑤一个类在继承另一个类的同时还可以实现接口,此时,extends关键字必须位于implements关键字之前。(先继承再实现)