《java JDK7 学习笔记》之接口与多态
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 学习笔记》之接口与多态的更多相关文章
- Java 学习笔记(7)——接口与多态
上一篇说了Java面向对象中的继承关系,在继承中说到:调用对象中的成员变量时,根据引用类型来决定调用谁,而调用成员方法时由于多态的存在,具体调用谁的方法需要根据new出来的对象决定,这篇主要描述的是J ...
- 《java JDK7 学习笔记》之继承与多态
1.面向对象中,子类继承父类,避免重复的行为定义,不过并非为了避免重复定义行为就使用继承.应该正确判断使用继承的时机及继承之后灵活的运用多态,才是学习继承时的重点. 2.程序代码重复在程序设计上,就是 ...
- 《java JDK7 学习笔记》之异常处理
1.java中所有的错误都会被打包为对象,JVM会尝试执行try区块中的程序代码,如果发生错误,执行流程会跳离错误发生点,然后比较catch括号中声明的异常类型,是否符合被抛出的错误对象类型,如果是的 ...
- 《java jdk7学习笔记》之java三大平台
Sun公司在2006年底,就将三大平台正名为java SE.java EE和java ME.也有很多人习惯用J2SE.J2EE和J2ME. 1.java SE java SE(标准版)是各应用平台的基 ...
- 《java JDK7 学习笔记》之Collection
一.使用Collection 收集对象 1.认识Collection架构 Java SE提供了满足各种需求的API,在使用这些API前,建议先了解其继承与接口操作架构,才能了解何时使用哪个类,以及类之 ...
- 《java JDK7 学习笔记》之对象封装
1.构造函数实现对象初始化流程的封装.方法封装了操作对象的流程.java中还可以使用private封装对象私有数据成员.封装的目的主要就是隐藏对象细节,将对象当做黑箱子进行操作. 2.在java命名规 ...
- 《java JDK7 学习笔记》之类和对象
1.在java中,要产生对象必须先定义类,类是对象的设计图,对象是类的实例.类定义时使用class关键词,建立实例对象要使用new关键词.以类名声明的变量,称为参考名称.参考变量或直接叫参考. 2.想 ...
- 《Java JDK7 学习笔记》课后练习题1
1.()组织负责监督审查Java相关技术规格的演进. A. JCP B. Apache C. EU D. W3C 2.Java技术规格必须以()正式文件提交审查. A. RFC B. JSR C. I ...
- 《Java JDK7 学习笔记》课后练习题2
1.如果在hello.java中撰写以下的程序代码: public class Hello { public static dmain(String[]args) { Sys ...
随机推荐
- STL模板中的map的使用与例题
最近的计分赛,记得自己的都只是过了两题.遇到了两次map,自己在寒假看了一点的map,只知道在字符串匹配的时候可以用的到.但是自己对map的使用还是不够熟练使用,这回在第一次和第二次的计分赛中都遇到可 ...
- C# BitArray
使用C#实现Huffman对文件进行压缩和解压缩,那个对Huffman编码后的01串没找到好的方法来保存,就很愚蠢的使用字符串保存"01"串,功能实现了,但是感觉总是有些别扭.就搜 ...
- Cesium原理篇:2最长的一帧之网格划分
上一篇我们从宏观上介绍了Cesium的渲染过程,本章延续上一章的内容,详细介绍一下Cesium网格划分的一些细节,包括如下几个方面: 流程 Tile四叉树的构建 LOD 流程 首先,通过上篇的类关系描 ...
- cookie设置保存用户名,填入中文名之后出现的错误500问题
对于问题发生的原因以后再来补充: 解决方法就是在dologin.jsp当中使用URLEncode工具类,这个工具类在java的net包当中 <一>用户浏览器-->jsp 的过程 1 ...
- LINQ to SQL语句(11)之Update
说明:更新操作,先获取对象,进行修改操作之后,直接调用SubmitChanges()方法即可提交.注意,这里是在同一个DataContext中,对于不同的DataContex看下面的讲解. 1.简单形 ...
- C# 发送Http请求 - WebClient类
WebClient位于System.Net命名空间下,通过这个类可以方便的创建Http请求并获取返回内容. 一.用法1 - DownloadData string uri = "http:/ ...
- Java基本概念(2)J2EE里面的2是什么意思
J2EE里面的2是什么意思 J2SE,J2SE,J2ME中2的含义要追溯要1998年.1998年Java 1.2版本发布,1999年发布Java 1.2的标准版,企业版,微型版三个版本,为了区分这三个 ...
- SQLServer并发问题,先SELECT后UPDATE,避免并发脏读情况解决
在SQL Server中,需要对数据操作进行先SELECT 之后UPDATE,对于这样的操作,如果出现高并发,可能导致脏读情况的发生.不能保证数据的同步. 解决方案是在事物中对表进行加更新锁: 事务一 ...
- 关于An association from the table refers to an unmapped class
今天配置SSH框架的时候出现这个异常,找了很久,才发现原来是是实体类映射文件中的<class name="Role" table="role">的n ...
- Server Tomcat v7.0 Server at localhost was unable to&nbs 报错问题解决
在eclipse启动tomcat时遇到超时45秒的问题: Server Tomcat v7.0 Server at localhost was unable to start within 45 se ...