前言ide
一、在Java中 ,实现抽象类的机制有两种:抽象类(abstract class)和接口(interface).测试
二、二者很是类似,甚至能够相互能够相互替换,所以不少的开发者对于两者的选择上很是的随意,其实,两者的开发区别仍是很大的。.net
目录接口
一、知识储备:抽象是什么开发
二、抽象类的两种实现方式get
抽象类示例class
// 定义1抽象动物类Animal,提供抽象方法 = cry()
public abstract class Animal {
public abstract void cry();
} 方法
// 猫、狗 = 动物类的子类
// 因为cry()为抽象方法,因此Cat、Dog必需要实现cry()
public class Cat extends Animal{ im
@Override
public void cry() {
System.out.println("猫叫:喵喵...");
}
} static
public class Dog extends Animal{
@Override
public void cry() {
System.out.println("狗叫:汪汪...");
}
}
// 测试
public class Test {
public static void main(String[] args) {
Animal a1 = new Cat();
Animal a2 = new Dog();
a1.cry();
a2.cry();
}
}
// 运行结果
猫叫:喵喵...
狗叫:汪汪
三、接口
示例:
interface Demo{
void method1();
void method2();
}
class Test implements Demo{
void method1();
void method2();
}
4、两者的区别
5、实例讲解
下面的实例,能够更好的去理解关于接口和抽象类的使用
5.1.需求描述:
需求一:有一类门,基本功能有开门和关门
需求二:有一类门,基于上面的需求增长了报警器功能。
5.2需求实现:该需求的实现方式有三种
一、只使用抽象类 二、只使用接口 三、同时使用抽象类和接口
示例:
// 方案1:只使用抽象类
abstract class Door{
abstract void open();
abstract void close();
abstract void alarm();
}
// 具体使用时
class AlarmDoor extends Door {
void open(){}
void close(){}
void alarm(){}
}
// 方案2:只使用接口
interface Door{
void open();
void close();
void alarm();
}
// 具体使用时
class AlarmDoor implements Door {
void open(){}
void close(){}
void alarm(){}
}
// 方案3:同时使用抽象类 & 接口
// 对于需求1 = 抽象1类事物,即 使用抽象类
abstract class Door{
abstract void open();
abstract void close();
}
// 对于需求2 = 抽象事物中的某个行为, 即 使用 接口
interface Alarm{
void alarm();
}
// 具体使用时 class AlarmDoor extends Door implements Alarm{ void open(){} void close(){} void alarm(){} }