9、抽象类与接口
2016-01-18 11:25
447 查看
九、抽象类与接口
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(); } } }
运行结果:
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树