更好的针对接口编程,使用接口内部类
来源:互联网 发布:淘宝有哪些好的男装店 编辑:程序博客网 时间:2024/06/05 19:40
首先第一句话“针对接口编程,而不是针对实现编程”,这句话大家应该经常看到或者听到,但是也有很多人不理解这句话到底是什么意思。
“针对接口编程”真正的意思是“针对 超类型 编程”,因为这样做程序就更加具有弹性这句话说的更直白一些就是“变量的声明类型最好是超类型,通常是一个抽象类或者接口,这样只要是实现了这个超类型的类的对象都可以指定给这个对象
下面举两个例子分别是 针对实现编程和针对接口编程: 我们的目的想要狗叫一声
1. Dog dog = new Dog();
dog.bark();
这样我们就实现了我们的目的,我们的目的让狗叫一声,我们new一个狗,调用的他bark()方法,然后狗叫了,但是这样有一点不好就是,硬编码导致代码死板,比如我们现在还想要猫、老虎、狮子、大象、鸟。。。都叫,我们就需要些 2*n行代码,而且几乎都是重复的。
2.针对接口编程——针对超类型编程
现在的类型有 猫、老虎、狮子、大象、鸟、狗,那他们的超类型(父类,接口)是什么呢?是Animal 没错吧,现在这个Animal的声明方式有三种:具体的父类、抽象父类、接口。 他们三个的优先选择顺序为:接口——抽象父类——具体父类,这里我就不解释为什么是这个顺序了,不够后面会说明为什么接口>抽象类。
我们把Animal定义成接口
interface Animal{ void makeSound();}
然后我们让 所有的动物都实现这个接口
Class Dog implements Animal{ makeSound(){ bark();} viod bark(){......};}
Animal a = new Dog();a.makcSound();
这里我们没有针对让狗叫而编程,而是针对狗的超类型Animal而编程。
为什么使用接口而不使用抽象类?
答:因为java不支持多继承,但是支持接口的多实现。
但是如果我们使用接口的化有一点不足的地方就是,接口内部不能有任何实现。
所有的动物都是呼吸,而且呼吸都一样,如果用接口的化我们的每一个实现都要重写 呼吸方法,而且方法的代码还一模一样,这就导致了代码重复问题,那怎么解决这个问题呢?这就到了文章的主题上了。
接口内部类:
正常情况下,不能在接口内放置任何代码,但是接口内部静态类可以作为接口的一部分,接口内部的任何东西都会自动的是public 和static,更好和我们的静态内部类符合
public interface MyInstace { void show(); class Test1 implements MyInstace { @Override public void show() { // TODO Auto-generated method stub System.out.println("我是接口内部类的方法"); } public static void main(String[] args) { new Test1().show(); } }}
输出结果
这样我们完全可以正确运行,这样之后我们就可以让我们所以MyInstace接口的实现类都拥有静态内部类的show()方法
public class Test implements MyInstace { public static void main(String[] args) { Test test = new Test(); new Test.Test1().show(); } @Override public void show() { // TODO Auto-generated method stub System.out.println("我是实现类"); }}
输出结果 :
当然使用静态内部类还有一个好处就是,每个类中都写有一个main()方法,用来测试这个类,这样做的缺点就是,那些代码必须带着已经编译过的额外代码,我们可以这样做
public class Test { public void f(){ System.out.println(" f()"); } public static class TestClass { public static void main(String[] args) { Test test = new Test(); test.f(); } }}
输出结果:
这样做会独立生成一个Test
以上内容来自《JAVA编程思想》和《Head First 设计模式》
- 更好的针对接口编程,使用接口内部类
- 接口的内部类-内部类
- 针对接口编程的理解
- 面向接口编程p199/内部类
- 牛刀小试 - 详解Java中的接口与内部类的使用
- 内部类与接口
- 接口和内部类
- 接口,内部类!!!
- 接口内部类
- 接口和内部类
- 接口和内部类
- 接口内部类
- 接口与内部类
- 抽象、接口、内部类
- 接口和内部类
- 接口中的内部类
- 接口与内部类
- 内部类和接口
- 计算员工合同到期日期
- 自制留言板
- js类型转换
- java程序 升级版ATM取款机
- java基础学习(三)--异常处理
- 更好的针对接口编程,使用接口内部类
- MySQL性能优化的最佳21条经验
- poj1390 Blocks(区间dp)
- 20170801 在其位
- 解决网易云托盘图标左置的问题!
- Effective Java 读书笔记
- sublime text3 之snippet编写代码片段
- Python实现设计模式--04.模版方法模式(Template Method Pattern)
- IC系统设计概述