1、对于“定义行为”也就是接口,可以使用interface关键字定义,接口中的方法不能操作,直接标示为abstract,而且一定是public修饰的。

类要操作接口,必须使用implements关键字。操作某接口时,对接口中定义的方法有两种处理方式,一是操作接口中定义的方法;二是再度将该方法标示为abstract。

2、以java的语意来说,继承会有“是一种”的关系,操作接口则表示“拥有行为”,但不会有“是一种”的关系。对于接口多态语法的判断,方式是“右边是不是拥有左边的行为”,或者“右边对象是不是操作了左边接口”。

3、类可以操作两个以上的类,也就是可以拥有两种以上的行为。类可以同时继承某个类,并操作某些接口。接口可以继承自另一个接口,也就是继承父接口行为,再在子接口中额外定义行为。

4、使用interface来定义抽象的行为外观,方法要声明为public abstract,无须且不能有操作。为了方便,也可以省略public abstract,编译程序会自动补齐。

5、可以使用接口枚举常数,只能定义为public static final。为了方便,public static final可以省略,编译程序可以自行补齐。

6、如果有两个接口都定义了某方法,操作两个接口的类并不会有错误,照样可以通过编译,但在设计上要思考一下:两个接口都有定义的方法是否表示不同的行为?若是相同的行为可以定义一个父接口;若是不同行为,得改变某个行为的方法名称。

7、接口可以继承别的接口,也可以同时继承两个以上的接口,同样也是使用extends关键字,这代表了继承父接口的行为。

8、如果有临时继承某个类或操作某个接口并建立实例的需求,而这类子类或接口操作类只使用一次,不需要为这些类定义名称,这时可以使用匿名内部类来解决这个需求。匿名内部类的语法为:

new  父类() |  接口(){

//类本体操作

};

9、从JDK5之后新增了enum语法,可用于定义枚举常数。enum定义了特殊的类,继承自java.lang.Enum,不过这是由编译程序处理,直接撰写程序继承Enum类会被编译程序拒绝。

10、enum实际上定义了类,而enum中列举的常数,实际上是public static final,且为枚举类型实例,无法撰写程序直接实例化枚举类型,因为构造函数权限设定为private,只有类中才可以实例化。

课后练习选择题:

1、interface Some{

protected void doSome();

}

以下描述正确的是:编译失败。

注:使用interface定义的接口内的行为方法默认是public abstract的,使用其他的编译程序会报错。

2、interface Some{

int x = 10;

}

public class Main{

public static void main(String[] args){

System.out.println(Some.x);

}

}

以下描述正确的是:显示10.

注:在java类中,可以直接使用接口.常量来直接调用常量,而不用去实现接口,向外界透露实现的行为。

3、interface Some{

void doSome();

}

class SomeImpl implments Some{

void doSome(){

System.out.println(“做一些事”);

}

}

public class Main{

public static void main(String[] args){

Some s = new SomeImpl();

s.doSome();

}

}

以下描述正确的是:编译失败。

注:因为类实现接口后,再次定义接口内的行为方法,方法的修饰符必须是public的。

4、interface Some{

void doSome();

}

class SomeImpl implments Some{

public void doSome(){

System.out.println(“做一些事”);

}

}

public class Main{

public static void main(String[] args){

Some s = new SomeImpl();

s.doSome();

}

}

以下描述正确的是:显示“做一些事”.

5、interface Some{

void doSome();

}

interface Other{

void doOther();

}

class SomeOtherImpl implements Some,Other{

public void doSome(){

System.out.println(“做一些事”);

}

public void doOther(){

System.out.println(“做其他事”);

}

}

public class Main{

public static void main(String[]  args){

Some  s =  new SomeOtherImpl();

s.doSome();

Other o = (Other) s;

o.doOther();

}

}

以下描述正确的是:显示“做一些事”,“做其他事”。

6、interface Some{

void doSome();

}

abstract class AbstractSome implements Some{

public abstract void doSome();

public void doService(){

System.out.println(“做一些服务”);

}

}

public class Main{

public static void main(String[]  args){

AbstractSome s = new AbstractSome();

s.doService();

}

}

以下描述正确的是:编译失败。

注:抽象类不能被实例化,但可以创建实例作为匿名内部类使用。

7、interface Some{

void doSome();

}

abstract class AbstractSome implements Some{

public abstract void doSome();

public void doService(){

System.out.println(“做一些服务”);

}

}

public class Main{

public static void main(String[]  args){

AbstractSome s = new AbstractSome(){

public void doSome(){

System.out.println(“做一些事”);

}

public void doService(){

}

};

s.doService();

}

}

以下描述正确的是:执行时不显示任何信息。

8、interface Some{

void doSome();

}

public class main {

public static void main(String[] args) {

Some s = new Some(){
            public void doSome(){
                System.out.println("做一些事");
            }
            public void doService(){
                System.out.println("做一些服务");
            }
        };
        s.doService();   
    }
}

以下描述正确的是:编译失败。

注:doService()方法没有在Some接口中声明。

9、interface Some{

protected static final int x = 10;

}

以下描述正确的是:编译失败。

注:因为接口中定义的常量只能是public static final修饰。

10、interface Some{

void doSome();

void doService(){

System.out.println("做一些服务");

}

}

以下描述正确的是:编译失败。

注:因为接口中定义的行为方法不能有具体实现。

《java JDK7 学习笔记》之接口与多态的更多相关文章

  1. Java 学习笔记(7)——接口与多态

    上一篇说了Java面向对象中的继承关系,在继承中说到:调用对象中的成员变量时,根据引用类型来决定调用谁,而调用成员方法时由于多态的存在,具体调用谁的方法需要根据new出来的对象决定,这篇主要描述的是J ...

  2. 《java JDK7 学习笔记》之继承与多态

    1.面向对象中,子类继承父类,避免重复的行为定义,不过并非为了避免重复定义行为就使用继承.应该正确判断使用继承的时机及继承之后灵活的运用多态,才是学习继承时的重点. 2.程序代码重复在程序设计上,就是 ...

  3. 《java JDK7 学习笔记》之异常处理

    1.java中所有的错误都会被打包为对象,JVM会尝试执行try区块中的程序代码,如果发生错误,执行流程会跳离错误发生点,然后比较catch括号中声明的异常类型,是否符合被抛出的错误对象类型,如果是的 ...

  4. 《java jdk7学习笔记》之java三大平台

    Sun公司在2006年底,就将三大平台正名为java SE.java EE和java ME.也有很多人习惯用J2SE.J2EE和J2ME. 1.java SE java SE(标准版)是各应用平台的基 ...

  5. 《java JDK7 学习笔记》之Collection

    一.使用Collection 收集对象 1.认识Collection架构 Java SE提供了满足各种需求的API,在使用这些API前,建议先了解其继承与接口操作架构,才能了解何时使用哪个类,以及类之 ...

  6. 《java JDK7 学习笔记》之对象封装

    1.构造函数实现对象初始化流程的封装.方法封装了操作对象的流程.java中还可以使用private封装对象私有数据成员.封装的目的主要就是隐藏对象细节,将对象当做黑箱子进行操作. 2.在java命名规 ...

  7. 《java JDK7 学习笔记》之类和对象

    1.在java中,要产生对象必须先定义类,类是对象的设计图,对象是类的实例.类定义时使用class关键词,建立实例对象要使用new关键词.以类名声明的变量,称为参考名称.参考变量或直接叫参考. 2.想 ...

  8. 《Java JDK7 学习笔记》课后练习题1

    1.()组织负责监督审查Java相关技术规格的演进. A. JCP B. Apache C. EU D. W3C 2.Java技术规格必须以()正式文件提交审查. A. RFC B. JSR C. I ...

  9. 《Java JDK7 学习笔记》课后练习题2

    1.如果在hello.java中撰写以下的程序代码: public class Hello {     public static dmain(String[]args) {          Sys ...

随机推荐

  1. ZOJ Problem Set - 1392 The Hardest Problem Ever

    放了一个长长的暑假,可能是这辈子最后一个这么长的暑假了吧,呵呵...今天来实验室了,先找了zoj上面简单的题目练练手直接贴代码了,不解释,就是一道简单的密文转换问题: #include <std ...

  2. 5.Struts.xml标签中的一些小技巧

    1.为Action属性注入值如给actions包下的test.java类中变量username赋值为"xingyun"在struts.xml中添加下面这段代码: <strut ...

  3. [Java 基础]方法

    方法的定义 Java方法是语句的集合,它们在一起执行一个功能. 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 语法 修饰符 返回值类型 方法名 (参数 ...

  4. jQuery-1.9.1源码分析系列(十六)ajax——ajax框架

    ajax的介绍就不多说了,点击可看. 既然是ajax框架,那么闲谈一谈jQuery的ajax处理思路. 现在的浏览器都支持ajax,只不过不同的浏览器使用方法可能有不同(IE使用new window. ...

  5. Nancy之基于Nancy.Hosting.Aspnet的小Demo

    近来学习了一下Nancy这个框架,感觉挺好用的,就写篇简单的文章记录一下大致用法,由于是刚接触,写的代码 可能不规范,也没有具体的分层..莫吐槽... Nancy的官网:http://nancyfx. ...

  6. 芒果TV招聘研发工程师(JAVA PYTHON),地点长沙

    长沙芒果TV招聘高级 JAVA Python 工程师,工作地点:湖南广电   有兴趣的邮件0xmalloc@gmail.com; zealotyin@qq.com 公司有一大批从北京上海一线互联网企业 ...

  7. svn提交时出现很多乱文件怎么解决

    在我们开发项目中的时候经常使用到svn,有时候我们commit的时候回出现很多无用的文件,这些文件就是未版本化的文件,怎么解决这些乱文件的问题呢? svn commit提交的时候有个"sho ...

  8. SSH输入错误Action

    在类型转化.输入验证校验 .文件上传等出错的时候,如Action中某个变量是int,而上传的值是"ABC",此时Action不会执行execute()函数,而是直接返回result ...

  9. 采花 bzoj 2743

    采花(1s 128MB)flower [题目描述] 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整 ...

  10. linux下 nginx、php-fpm、mysql 开机自启动

    1.分别为每个编写shell脚本放入/etc/init.d下,添加service服务 2.把每个service服务加入到chkconfig列表 这里我们以php-fpm为例说明下步骤: php-fpm ...