1. A class containing abstract methods is called an abstract class. If a class Contains one of more abstract methods, the class itself must be qualified(限定,修饰) as a abstract.
  2. If you inherit from an abstract class you want to make objects of the new type, you must provide method definitions for all the abstract methods in the base class. If you don't(and you may choose not to), then the derived class is also abstract, and the compiler will force you to qualify that class with the abstract keyword.
  3. It's possible to make a class abstract without including any abstract methods. This is useful when you've got a class in which it doesn't make sense to have any abstract methods, and yet you want to prevent any instances of that class.
  4. If you do inherit from a non-interface, you can inherit from only one. All the rest of the base elements must be interfaces. You place all the interface names after the implements keyword and separate them with commas. You can have as many interfaces ay you want. You can upcast to each interface, because each interface is an independent type.
  5. 如果你创建的新的类即继承了某个类同时又实现了某些接口,那么在类声明的时候,被继承的类必须是第一个出现的,然后才是接口(如果你不这样做的话,编译器就会报错)。
  6. Keep in mind that one of the core reasons for interfaces is: to upcast to more than one base type(and the flexibility that this provides). However, a second reason for using interfaces is the same as using an abstract base class: to prevent the client programmer from making an object of this class and to establish that it is only an interface. This brings up a question: Should you use an interface or an abstract class? If it's possible to create your base class without any method definitions or member variables, you should always prefer interfaces to abstract classes. In fact, if you know something is going to be a base class, you can consider making it an interface.
  7. Normally, you can use extends with only a single class, but extends can refer to multiple base interfaces when building a new interface(The interface names are simply separated with commas).
  8. 我们知道一个接口可以继承多个接口,也可以继承一个类同时又实现多个接口,如果它继承的多个接口(或者继承的类和实现的多个接口)中有同名同参但是返回值不同的方法时会出现什么情况呢?答案是会出现命名冲突,编译不通过,因为两个方法仅仅是返回值类型不同并不能构成重载。因此我们应当尽量避免在不同的接口中用两个相同的方法名,尤其是这两个接口常常被一个类一同实现的时候更应该额外注意这一点。
  9. 在Java SE5 之前,Java 中还没有enum 关键字,接口就成为提供一组常量值的一个简便的工具(在一些遗留的老代码中可能会看到这种情况)。接口中的成员变量,自动的是public static final 的。这些值被存储在静态存储区中。
  10. 许多人痴迷于接口的特性,总是想尽办法在一切地方应用它,其实这是一种过早优化(万恶之源:P)。An appropriate guideline is to prefer classes to interfaces. Start with classes, and if it becomes clear that interfaces are necessary, then refactor. Interfaces are a great tool, but they can easily be overused.

TIJ——Chapter Nine:Interfaces的更多相关文章

  1. TIJ——Chapter Eleven:Holding Your Objects

    Java Provides a number of ways to hold objects: An array associates numerical indexes to objects. It ...

  2. TIJ——Chapter Two:Everything Is an Object

    If we spoke a different language, we would perceive a somewhat different world. Ludwig Wittgenstein( ...

  3. TIJ——Chapter One:Introduction to Objects

    ///:~容我对这个系列美其名曰"读书笔记",其实shi在练习英文哈:-) Introduction to Objects Object-oriented programming( ...

  4. TIJ——Chapter Fourteen:Type Information

    Runtime type information(RTTI) allows you to discover and use type information while a program is ru ...

  5. TIJ——Chapter Twelve:Error Handling with Exception

    Exception guidelines Use exceptions to: Handle problems at the appropriate level.(Avoid catching exc ...

  6. TIJ——Chapter Ten:Inner Classes

    先提纲挈领地来个总结: 内部类(Inner Class)有四种: member inner class,即成员内部类.可以访问外部类所有方法与成员变量.生成成员内部类对象的方法:OuterClass. ...

  7. TIJ——Chapter Eight:Polymorphism

    The twist |_Method-call binding Connecting a method call to a method body is called binding. When bi ...

  8. TIJ——Chapter Seven:Reusing Classes

    Reusing Classes 有两种常用方式实现类的重用,组件(在新类中创建存在类的对象)和继承. Composition syntax Every non-primitive object has ...

  9. TIJ——Chapter Five:Initialization & Cleanup

    Method overloading |_Distinguishing overloaded methods If the methods hava the same name, how can Ja ...

随机推荐

  1. 线性求所有数模p的乘法逆元

    推理: 假如当前计算的是x在%p意义下的逆元,设$p=kx+y$,则 $\Large kx+y\equiv 0(mod\ p)$ 两边同时乘上$x^{-1}y^{-1}$(这里代表逆元) 则方程变为$ ...

  2. TZ_06_SpringMVC的入门程序

    SpringMVC的入门程序 1. 创建WEB工程,引入开发的jar包 1. 具体的坐标如下 2. 配置核心的控制器(配置DispatcherServlet) 1. 在web.xml配置文件中核心控制 ...

  3. 移动web--移动屏幕适配-完整的viewport设置

  4. pc端样式重置以及常用样式规范class

    //reset html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a ...

  5. C# 多线程的代价~内存都被吃了!

    异步操作是.net4.5推出的新名词,事实上,这东西早就有了,它归根结底是通过线程池来实现的,即将一个大任务分成多个小任何块,每个线程并行处理其中的一个,完成后再把结果告诉主线程,在.net4.5推出 ...

  6. Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---装饰模式之StarBuzzCoffee[转]

     1  2{<HeadFirst设计模式>之装饰模式 }  3{ 本单元中的类为被装饰者         }  4{ 编译工具: Delphi7.0          }  5{ E-Ma ...

  7. mybatis深入理解(一)-----Mybatis初始化机制详解

    对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章将通过以下几点详细介绍MyBatis的初始化过程. 一. MyBatis的初始化做了什么 1.configuration ...

  8. MySQLDemo2

    -- 查询所有数据库 show databases -- 删除数据库 drop database a -- use `数据库名称`; 表示使用此数据库 use mybatis -- 查看表结构 sho ...

  9. Django REST Framework之认证组件

    什么是认证 认证即需要知道是谁在访问服务器,需要有一个合法身份.认证的方式可以有很多种,例如session+cookie.token等,这里以token为例.如果请求中没有token,我们认为这是未登 ...

  10. day36 07-Hibernate抓取策略:many-to-one上的抓取策略

    package cn.itcast.test; import java.util.List; import org.hibernate.Hibernate; import org.hibernate. ...