在Java中可以通过对象的多态性为抽象类和接口实例化,这样再使用抽象类和接口即可调用本子类中所重写过的方法。
- 抽象类——模板设计
abstract class Person{
private String name;
private int age;
public Person(String name,int age){
this.name=name;
this.age=age;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public void say(){
System.out.println(this.getContent());
}
public abstract String getContent();
}
class Student extends Person{
private float score;
public Student(String name,int age,float score){
super(name,age);
this.score=score;
}
public String getContent(){
return "学生信息-->姓名:"+super.getName()+";年龄:"+super.getAge()+";成绩:"+this.score;
}
}
class Worker extends Person{
private float salary;
public Worker(String name,int age,float salary){
super(name,age);
this.salary=salary;
}
public String getContent(){
return "工人信息-->姓名:"+super.getName()+";年龄:"+super.getAge()+";工资:"+this.salary;
}
}
public class AbstractCaseDemo02{
public static void main(String args[]){
Person per1=new Student("张三",20,99.0f);
Person per2=new Worker("李四",30,3000.0f);
per1.say();
per2.say();
}
}
运行结果:
- 接口——制定标准
interface USB{
public void start();
public void stop();
}
class Computer{
public static void plugin(USB usb){
usb.start();
System.out.println("======USB设备工作======");
usb.stop();
}
}
class Flash implements USB{
public void start(){
System.out.println("U盘开始工作。");
}
public void stop(){
System.out.println("U盘停止工作。");
}
}
class Print implements USB{
public void start(){
System.out.println("打印机开始工作。");
}
public void stop(){
System.out.println("打印机停止工作。");
}
}
public class InterfaceCaseDemo02{
public static void main(String args[]){
Computer.plugin(new Flash());
Computer.plugin(new Print());
}
}
运行结果:
抽象类与接口的关系
区别点 | 抽象类 | 接口 |
---|---|---|
定义 | 包含一个抽象方法的类 | 抽象方法和全局常量的集合 |
组成 | 构造方法、抽象方法、普通方法、常量、变量 | 常量、抽象方法 |
使用 | 子类继承抽象类(extends) | 子类实现接口(implements) |
关系 | 抽象类可以实现多个接口 | 借口不能继承抽象类,但允许继承多个接口 |
常见设计模式 | 模板设计 | 工厂设计、代理设计 |
对象 | 都通过对象的多态性产生 | 实例化对象 |
局限 | 抽象类有单继承的局限 | 接口没有此局限 |
实际 | 作为一个模板 | 作为一个标准或表示一种能力 |
选择 | 若两者都可以使用,则优先使用 | 接口,避免单继承的局限 |
特殊 | 一个抽象类中可包含多个接口 | ,一个接口可包含多个抽象类 |