9、抽象类与接口

来源:互联网 发布:淘宝修图多少钱一张 编辑:程序博客网 时间:2024/06/05 09:46


九、抽象类与接口

1、系统结构图(xmind)

——1.抽象类:


—2.接口:



2、tips

——1.抽象类的由来
       多个对象都具备相同的功能,但是功能具体内容有所不同,那么在抽取过程中,只抽取了功能定义,并未抽
取功能主体,那么只有功能声明,没有功能主体的方法称为抽象方法。
       例如:狼和狗都有吼叫的方法,可是吼叫内容是不一样的。所以抽象出来的犬科虽然有吼叫功能,但是并不
明确吼叫的细节。

——2.栗

1.需求:

    公司中程序员有姓名,工号,薪水,工作内容。

    项目经理除了有姓名,工号,薪水,还有奖金,工作内容。

2.分析:

程序员:

        属性:姓名,工号,薪水。

        行为:工作。

经理:

        属性:姓名,工号,薪水,奖金。

        行为:工作。

程序员和经理不存在着直接继承关系。

但是,程序员和经理却具有共性内容,可以进行抽取,因为他们都是公司的雇员。

可以将程序员和经理进行抽取,建立体系。

代码:

abstract class Employee{private String name;private String id;private double salary;//雇员,有名字、id、薪水三个属性,有work这个行为Employee(String name,String id,double salary){this.name = name;this.id = id;this.salary = salary;}public abstract void work();}//程序员继承雇员,输入属于程序员的三个属性以及他工作code的行为class programmer extends Employee{programmer(String name,String id,double salary){super(name,id,salary);}//重写work方法public void work(){System.out.println("code..");}}//经理继承雇员,输入属于经理的三个属性,工作manager的行为class manager extends Employee{manager(String name,String id,double salary){super(name,id,salary);}//重写work方法public void work(){System.out.println("manager");}}class EmployeeDemo{public static void main(String[] args){programmer p = new programmer("wangwu","a1",10000);p.work();manager m = new manager("lisi","a2",11000);m.work();}}


运行结果:


——3.接口

1.虽然抽象类中的全局变量和抽象方法的修饰符都可以不用写,但这样阅读性很差,所以最好写上。

2.类与类之间是继承关系,类与接口直接是实现关系。

3.接口不可以实例化,能由实现了接口并覆盖了接口中所有的抽象方法的子类实例化。否则,这个子类就是一个抽象类。


——4.抽象类和接口的异同点

相同点:都是不断向上抽取而来的。

不同点:

       1.抽象类需要被继承,而且只能单继承。

          接口需要被实现,而且可以多实现。

       2.抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法。

          接口中只能定义抽象方法,必须由子类去实现。

       3.抽象类的继承,是is a关系,定义该体系的基本共性内容。

          接口的实现是like a关系。

       4.抽象类中能够将变量和方法私有。

          接口中的方法和常量只能是public。


——5.接口实例

/*笔记本电脑使用:为了扩展笔记本的功能,但日后出现什么功能设备不知道。因此需要定义一个规则,只要日后出现的设备都符合这个规则即可。规则在java中就是接口*/interface Usb{//暴露的原则public void open();public void close();}class UsbMouse implements Usb{public void open(){System.out.println("mouse open");}public void close(){System.out.println("mouse close");}}//实现原则,这些设备和电脑的耦合性降低了class Upan implements Usb{public void open(){System.out.println("upan open");}public void close(){System.out.println("upan close");}}class  BookPc{public static void main(String[] args) {useUsb(new Upan());}//使用原则//接口类型的引用,用于接受(指向)接口的子类对象。public static void useUsb(Usb u){if(u != null){u.open();u.close();}}}


运行结果:





0 0