一.抽象类和抽象方法
1.建立这个通用接口的唯一理由是,不同的子类可以用不同的方法表示此接口。

2.如果一个类包含一个或多个抽象方法,该类必须被限定为抽象。成为抽象类并不需要所有的方法都是抽象的,仅需将某些方法声明为抽象的即可。

interface Instrument1 {int VALUE = 5 ;//在该类中没有任何方法被声明为是public的,但是它们自动就都是publicvoid play(Note n);void adjust();
}public class Wind1 implements Instrument1{@Overridepublic void play(Note n) {//...}@Overridepublic void adjust() {//...}}

3.完全解耦
只要一个方法操作的是类而非接口,那么你只能使用这个类及其子类。如果你想要将这个方法应用于不在此继承结构中的某个类,接口可以在很大程度上放宽这中限制。

4.Java中的多重继承

interface CanSwim {void swim();
}
interface CanFly {void fly();
}
interface CanFight {void fight();
}
class ActionCharacter {public void fight(){};
}
//父类已经实现了fight()
public class Hero extends ActionCharacterimplements CanFly , CanFight ,CanSwim{@Overridepublic void swim() {// TODO Auto-generated method stub}@Overridepublic void fly() {// TODO Auto-generated method stub}
}public class MainJava { public static void t(CanFight x){x.fight();}public static void u(CanSwim x){x.swim();}public static void v(CanFly x){x.fly();}public static void w(ActionCharacter x){x.fight();}public static void main(String[] args) { Hero h = new Hero();//当Hero对象被创建时,它可以被传递给这些方法中的任何一个。向上转型t(h);u(h);v(h);w(h);}
}

(1)使用接口的核心原因:为了能够向上转型为多个基类型,由此带来的灵活性。第二个原因:与使用抽象基类相同,防止客户端程序员创建该类的对象,并确保这仅仅是建立一个接口。

(2)抽象类和接口的选择:如果要创建不带任何方法定义和成员变量的基类,那么就应该选择接口而不是抽象类。

5.通过继承来扩展接口

interface Monster {void menace();
}interface DangerousMonster extends Monster{void destory();
}interface Lethal {void kill();
}public class DragonZilla implements DangerousMonster{@Overridepublic void menace() {// TODO Auto-generated method stub}@Overridepublic void destory() {// TODO Auto-generated method stub}}//只有接口继承可以继承多个接口
interface Vampire extends DangerousMonster ,Lethal{void drinkBlood();
}public class MainJava { static void u(Monster b){b.menace();}public static void main(String[] args) { //用接口接收实例DangerousMonster barney = new DragonZilla();u(barney);}
}

6.适配接口
7.接口中的域
(1)因为你放入接口中的任何域都自动是static和final的,所以接口就成为了一种很便捷的用来创建常量组的工具。

(2)初始化接口中的域

//任何域都自动是static和final,大写字母风格
public interface RandVals {Random RAND = new Random(47);int RANDOM_INT = RAND.nextInt(10);
}public class MainJava { public static void main(String[] args) { //这些域不是接口的一部分,它们的值被存储在该接口的静态存储区域内print(RandVals.RANDOM_INT) ;}
}

8.嵌套接口

public class A {interface B{void f();}public class BImp implements B{public void f(){}}public class BImp2 implements B{public void f(){};}public interface C{void f();}class CImp implements C {public void f(){}}private class CImp2 implements C {public void f(){}}private interface D{void f();}private class DImp implements D {public void f(){}}public class DImp2 implements D {public void f(){}}public D getD(){return new DImp2();}private D dRef;public void receiveD(D d){dRef = d ;dRef.f();}
}interface E {interface G{void f();}public interface H{void f();}void g();
}public class MainJava { public class BImp implements A.B{public void f(){}}class CImp implements A.C {public void f(){}}class EImp implements E {public void g(){}}class EGImp implements E.G{public void f(){}}class EImp2 implements E{public void g(){}class EG implements E.G{public void f(){}}}public static void main(String[] args) { A a = new A();//a.getD()   can't access A.DA a2 = new A();a2.receiveD(a.getD());}
}

(1)嵌套在另一个接口中的接口自动就是public的,而不能声明为private的

9.接口与工厂
接口是实现多重继承的途径,而生成遵循某个接口的对象的典型方式就是工厂方法设计模式。我们在工厂对象上调用的是创建方法,而该工厂对象将生成接口的某个实现的对象。

//接口:具体类的接口抽象
interface Service {void method1();void method2();
}//接口:工厂类接口抽象
interface ServiceFactory {Service getServoce();
}//基类:具体类的基类
public class Implementation1 implements Service{Implementation1(){};public void method1() {}public void method2() {}}public class Implementation2 implements Service{Implementation2() {      } public void method1() {}public void method2() {}}//基类:工厂类基类
public class ImplementationFactory implements ServiceFactory{public Service getServoce() {return new Implementation1();}}public class Implementation2Factory implements ServiceFactory{@Overridepublic Service getServoce() {// TODO Auto-generated method stubreturn new Implementation2();}}public class MainJava { public static void serviceConsumer(ServiceFactory fact){//通过工厂类生成对象Service s = fact.getServoce();s.method1();s.method2();}public static void main(String[] args) { serviceConsumer(new ImplementationFactory());serviceConsumer(new Implementation2Factory());}
}

10.在相同的棋盘上下国际象棋和西洋跳棋
(工厂模式:工厂对象将生成接口的某个实现的对象)

interface Game {boolean move();
}interface GameFactory {Game getGame();
}public class Chess implements Game{private int moves = 0 ;private static final int MOVES = 4 ;public boolean move() {  System.out.println("Chess move "+ moves);return ++moves != MOVES ;}
}public class Checkers implements Game{private int moves = 0 ;private static final int MOVES = 3 ;public boolean move() {  System.out.println("Checkers move "+ moves);return ++moves != MOVES ;}}public class ChessFactory implements GameFactory{public Game getGame() {return new Chess();}}public class CheckersFactory implements GameFactory{@Overridepublic Game getGame() {// TODO Auto-generated method stubreturn new Checkers();}}public class MainJava { public static void playGame(GameFactory factory){Game s= factory.getGame();}public static void main(String[] args) { playGame(new CheckersFactory());playGame(new ChessFactory());}
}

JAVA编程思想--接口相关推荐

  1. java编程思想 接口_java编程思想——接口

    接口与内部类为我们提供了一种接口与实现分离的更加结构化的方法. 1.抽象类与抽象方法 抽象类,作为普通的类和接口之间的一种中庸之道. 抽象方法:仅有声明而没有方法体,如abstract void pl ...

  2. JAVA编程思想(二)如何面向接口编程

    1. 接口的本质 接口封装了细节 接口对调用者封装了实现细节,调用者只需按接口规范使用,而不关心怎么实现,例如我们最常见的数据库连接接口Connection,当通过某个工具包获取Connection后 ...

  3. 56 java编程思想 创建窗口和程序片 用户接口API

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 56.j ...

  4. 56.java编程思想——创建窗口和程序片 用户接口API

    56.java编程思想--创建窗口和程序片 用户接口API Java 1.1 版同样增加了一些重要的新功能,包括焦点遍历,桌面色彩访问,打印"沙箱内"及早期的剪贴板支持. 焦点遍历 ...

  5. Java中的泛型 --- Java 编程思想

    前言 ​ 我一直都认为泛型是程序语言设计中一个非常基础,重要的概念,Java 中的泛型到底是怎么样的,为什么会有泛型,泛型怎么发展出来的.通透理解泛型是学好基础里面中非常重要的.于是,我对<Ja ...

  6. JAVA编程思想学习笔记——第一章 对象导论

    搞了一年多java,野路子出身,发现java基础这块还是相当的薄弱!故决定学习<Java编程思想>这本书.在此把学习的知识点记录下! 面向对象的五大特性 1.万物皆为对象 2.程序是对象的 ...

  7. java 四舍五入_《JAVA编程思想》5分钟速成:1-4章:概述

    前言: 1.面向对象的特征有哪些方面? 2.Math.round(11.5) 等于多少? Math.round(-11.5)等于多少? 3.float f=3.4;是否正确? 4.short s1 = ...

  8. 33.JAVA编程思想——JAVA IO File类

    33.JAVA编程思想--JAVA IO File类 RandomAccessFile用于包括了已知长度记录的文件.以便我们能用 seek()从一条记录移至还有一条:然后读取或改动那些记录. 各记录的 ...

  9. Java编程思想学习(一)----对象导论中多态的理解

    1.1抽象过程 1)万物皆对象. 2)程序是对象的集合,他们通过发送消息来告知彼此所要求做的. 3)每个对象都有自己的由其他对象所构成的存储. 4)每个对象都拥有其类型. 5)某一特定类型的所有对象都 ...

最新文章

  1. java cst gmt_“CST”和“GMT”时间的区别?
  2. 在地理文本处理技术上,高德有哪些技巧?
  3. Google Code Jam Round 1A 2015 解题报告
  4. Django从理论到实战(part43)--HttpResponse对象
  5. oracle查询包含某个字段的表
  6. 许昌:让便捷支付成为智慧城市新名片
  7. CSS之基于视窗单位的排版
  8. 高校讲师年终奖,能有多少?
  9. java获取网络图片_有了这50套Java毕设项目(源码 案例),offer拿到手软,无偿分享...
  10. sql server 2005 修改动态端口,连接字符串为:需要改成:IP地址+逗号+端口号才行...
  11. Sharding-JDBC水平分表(分片策略)_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记008
  12. JS 实现两表格里的数据来回 转移
  13. [转载] 使用Python中的NLTK和spaCy删除停用词与文本标准化
  14. 搜索很久_装了SSD你还需要这个软件才更快,搜索查找文件数据从此不再等待
  15. 基于RV1126平台imx291分析 --- v4l2_pipeline_pm_use
  16. html5考试总结300字,期中考试总结300字大全
  17. 大自然是最广阔的“感统训练室”,端午节带上孩子“趣”玩吧!
  18. DNA转换为C语言,DNA (C语言代码)
  19. 汇编语言之Debug教程篇
  20. kb-vuln3 靶机 wp

热门文章

  1. 永恒之蓝漏洞(开放445端口,关闭防火墙)
  2. windows xp安装找不到声卡
  3. 记录知识点---通过双任务一致性进行半监督医学图像分割
  4. 上传图片并预览 限制个数
  5. 身份证扫描件联网OCR识别
  6. 台达变频器调试软件 软件可通过电脑调试台达各系列变频器
  7. 使用AndroidStudio优雅的敲代码
  8. 中国电力电气创新大会中企业家代表鲁川先生的精彩演讲震耳发聩!
  9. python3进阶学习总结——安装PyMySQL
  10. evo轨迹曲线设置指令evo_config的使用