抽象类与接口的应用
一. 抽象类的实际应用——模板设计
通过对象的多态性可以为抽象类实例化,那么抽象类该如何使用那?假设人分为学生和工人,学生和工人都可以说话,但是说的内容不相同,那么说话的功能是一样的,而说的内容由学生和工人自己来决定,此时可以利用抽象类来实现此场景。
【抽象类的实际应用】
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 String school;
public Student(String name,int age,String school){
super(name,age);
this.school=school;
}
public String getContent(){
return "学生信息:\n姓名:"+super.getName()+"\n年龄:"+super.getAge()
+"\n学校:"+this.school;
}
}
class Worker extends Person
{
private int salary;
public Worker(String name,int age,int salary){
super(name,age);
this.salary=salary;
}
public String getContent(){
return "工人信息:\n姓名:"+super.getName()+"\n年龄:"+super.getAge()
+"\n工资:"+this.salary;
}
}
public class AbstractCaseDemo02
{
public static void main(String[] args){
Person a=new Student("张三",20,"ZZU");//向上转型,实例化抽象类
Person b=new Worker("李四",25,5000);
a.say();
b.say();
}
}
运行结果为:
学生信息:
姓名:张三
年龄:20
学校:ZZU
工人信息:
姓名:李四
年龄:25
工资:5000
从程序运行的结果来看,在Person类中就相当于定义了一个模板,在主方法中调用时,调用的是普通的方法,而子类只需要是想父类中的抽象方法,就可以取得一个人的具体信息。
二. 接口的实际应用——指定标准
接口是Java解决多继承局限的一种手段,而且从前面的内容读者也已经清楚可以通过对象的多态性为接口进行实例化,但是接口在实际应用中更多的是用来制定标准。例如,U盘和打印机都可以插在计算机使用,这是因为他们都有USB的接口,对于计算机来说,只要是符合了USB接口标准的设备都可以插进来。
【制定USB标准】
interface USB //定义USB接口
{
public void start();//USB设备开始工作
public void stop();//USB设备停止工作
}
class Computer
{
public static void plugin(USB usb){//只要是USB的设备都可以插入
usb.start();//让USB设备开始工作
System.out.println("========USB设备工作========");
usb.stop();//让USB设备停止工作
}
}
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());//插入U盘
Computer.plugin(new Print());//插入打印机
}
}
运行结果为:
U盘开始工作
========USB设备工作========
U盘停止工作
打印机开始工作
========USB设备工作========
打印机停止工作
从以上程序可以清楚的发现,接口就是规定了一个标准,计算机认的只是接口,而对于具体的设备计算机本身并不关心。