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();}}}
运行结果:
- 9、抽象类与接口
- 抽象类与接口
- 接口与抽象类
- 抽象类与接口
- 抽象类与接口
- 抽象类与接口
- 抽象类与接口
- 接口与抽象类
- 抽象类与接口
- 接口与抽象类
- 抽象类与接口
- 抽象类与接口
- 抽象类与接口
- 接口与抽象类
- 抽象类与接口
- 抽象类与接口
- 抽象类与接口
- 接口与抽象类
- Apache Spark 学习笔记 (3) 安装Ambari
- iOS 图片压缩
- Java学习笔记(73)-----------ThreadLocal
- 每日一算法5--文本的倒序输出
- leetcode 321: Create Maximum Number
- 9、抽象类与接口
- AngularJS进阶(三十)AngularJS项目开发技巧之图片预加载
- Android Image点击效果
- 建造者模式
- Java类的连接与初始化
- Java学习笔记(74)------------线程池
- 手把手教你写Com(Step by Step COM Tutorial)
- 超分辨学习之一___超分辨率复原
- 在eclipse导入项目的步骤