适配器模式以及为什么允许声明没有抽象方法的类为抽象类?
2015-05-17 18:47
169 查看
就以适配器类来说吧
MouseAdapter是抽象类,但是没有抽象方法
(如果他不是抽象的)直接实例化这个类没有没有任何意义
既然我们需要使用这个类,就必然会覆盖某个方法,但又不知道是哪个方法,因此只有将类声明为抽像的
使用者根据需要来覆盖方法
一个没有抽象方法的抽象类一般来讲都会有诺干空的方法,这些方法不是必须要实现的,但是如果都不去实现这些方法,那这个类就没有什么意义了。
抽象类不能被实例化,也就是不能用new关键字去产生对象
/*
* 问题:
* 接口(方法比较多) -- 实现类(仅仅使用一个,也得把其他的实现给提供了,哪怕是空实现)
* 太麻烦了。
* 解决方案:
* 接口(方法比较多) -- 适配器类(实现接口,仅仅空实现) -- 实现类(用哪个重写哪个)
*/
接口:
实现接口的适配器类(抽象的)
自定义实现适配器中的某个方法:
测试类:
MouseAdapter是抽象类,但是没有抽象方法
(如果他不是抽象的)直接实例化这个类没有没有任何意义
既然我们需要使用这个类,就必然会覆盖某个方法,但又不知道是哪个方法,因此只有将类声明为抽像的
使用者根据需要来覆盖方法
一个没有抽象方法的抽象类一般来讲都会有诺干空的方法,这些方法不是必须要实现的,但是如果都不去实现这些方法,那这个类就没有什么意义了。
抽象类不能被实例化,也就是不能用new关键字去产生对象
/*
* 问题:
* 接口(方法比较多) -- 实现类(仅仅使用一个,也得把其他的实现给提供了,哪怕是空实现)
* 太麻烦了。
* 解决方案:
* 接口(方法比较多) -- 适配器类(实现接口,仅仅空实现) -- 实现类(用哪个重写哪个)
*/
接口:
package 结构型_适配器模式; /* * 针对用户操作的四种功能的一个接口 */ public interface UserDao { /** * 添加 */ public abstract void add(); /** * 删除 */ public abstract void delete(); /** * 更新 */ public abstract void update(); /** * 查询 */ public abstract void find(); }
实现接口的适配器类(抽象的)
package 结构型_适配器模式; public abstract class UserAdapter implements UserDao { @Override public void add() { } @Override public void delete() { } @Override public void update() { } @Override public void find() { } }
自定义实现适配器中的某个方法:
package 结构型_适配器模式; public class UserDaoImpl2 extends UserAdapter { @Override public void add() { System.out.println("继承适配器后重写添加功能"); } }
测试类:
package 结构型_适配器模式; public class UserDaoDemo { public static void main(String[] args) { // UserDao dao = new UserDaoImpl(); // dao.find(); //我没有说我们需要四种功能都实现啊 UserDao dao2 = new UserDaoImpl2(); dao2.add(); } }
相关文章推荐
- Spring 代理对象,cglib,jdk的问题思考,AOP 配置注解拦截 的一些问题.为什么不要注解在接口,以及抽象方法.
- Java第11次作业:什么是继承?继承的好处?什么是覆写?super()?构造代码块?子父类初始化顺序? 抽象类能用final声明吗?final关键字声明类 方法 变量以及全局常量?抽象类的构造方法?
- 抽象类、抽象方法、以及接口的区别
- 《黑马程序员》java笔记->【03】没有抽象方法的抽象类
- 为什么这些java接口没有抽象方法?浅谈Java标记接口
- 没有抽象方法的类,可以申明为抽象方法吗?有抽象方法的类,一定要申明为抽象类。。
- 抽象类没有抽象方法
- 为什么这些java接口没有抽象方法?浅谈Java标记接口
- 分清Java抽象方法、抽象类以及接口
- 抽象类可以没有抽象方法,不能被实例化
- 没有抽象方法的抽象类,存在什么样的意义呢?
- C#中的虚方法、抽象方法、抽象类以及接口
- C#抽象类与抽象方法--就是类里面定义了函数而函数里面什么都没有做的类
- 为什么这些java接口没有抽象方法?浅谈Java标记接口
- Java中没有抽象方法的抽象类
- python 之浅谈接口的定义和抽象类以及抽象方法
- Unity中为什么使用protobuf以及使用方法
- 抽象类的方法(虚方法,抽象方法,普通方法)
- Java的static方法为什么不允许直接使用非static的变量
- 为什么使用Java泛型 以及 Java泛型使用方法