- 浏览: 16714 次
最新评论
1.相对abstract class(抽象类)来讲,interface则造出了“完全抽象的class”,丝毫不带半点实现的内容。且interface中的所有methods都是虚的空的(没有body),当然,编译器也会强迫你这样做。具体看下面代码:
1-1.interface中的方法无需声明,都会自动设为public
1-2.interface中的数据成员也变为了public static final
具体看下面代码:
注意,当某个类(class B)实现了一个接口(interface A)时,一定要把它实现的methods(Hello())标明为public,否则编译器会报错。
2.实现Java中的"多重继承",具体看下面代码:
如上,我继承(extends)自父亲,但我的身份却可以是“人类(human)”或者“男孩(boy)”。同样,在java中,只能继承一个一般的Class(non-interface即非接口类),但却可以实现多个interface,也就是说“interface让你拥有多个身份”。这当然更有利于多态的应用。
2-1.interface可以也只能是继承另一个接口,但不是class类
2-2.下面说明同时实现多个接口时需要注意的事项:
2-2-1.class Child为什么实现了 Man和Woman 两个interface却只实现了Woman一个接口呢?
因为Child还同时继承了一个Father类,而Father中恰好有一个一模一样的void fight(),所以,在继承的同时,“爸爸替儿子”自动的实现了fight(),不用“儿子”亲自动手。
但是要注意,必须要完全相同才行!(即需要同参数列表、同返回值)
2-2-2. Child1不能再写下去是因为他所继承的Mother类的void cooking()与它所实现的Woman接口中的int cooking()产生冲突。两者名称相同,但是返回值不一样,导致编译器不知道该使用哪一个或者应该重写等,所以会报出错误。
所以需要提醒的是:尽量不要实现含同名参数的interface,或者就干脆不要写同名的函数。
3.产生常量:由于interface中的数据成员会自动成为public static final
使用的时候,直接 Months.JANURAUY*10就可以。另:因为interface的常量数据成员是static静态的,所以当你首次使用这个interface时,就会自动初始化里面的数据,不管你使用多少次它的数值都不会再变了
我们看到,VAL_A是由随机数得值的,但当你第一次使用它时,VAL_A被赋予了一个随机数3.14,但以后不管你用多少次,都只是同一个数3.14。
4.interface可以互相嵌套,既可以嵌在class中,也可以嵌在另一个interface中。
4-1.当某一个interface嵌套到了另一个interface中时,它一定会变成public,且无法标记为private
4-2.当你实现某个interface时,根本无须实现嵌套在它里面的Other interfaces
4-3.private interface是无法在它所定义的class之外被发现的
interface A{ void x();//这里不需写访问权限,x()就自动成为了public void x() String Hello(); }
1-1.interface中的方法无需声明,都会自动设为public
1-2.interface中的数据成员也变为了public static final
具体看下面代码:
class B implements A{ String str="Hello";//这里的str很自然的变成了public static final String str; public void x(){ //……// } public String Hello(){ return str; } }
注意,当某个类(class B)实现了一个接口(interface A)时,一定要把它实现的methods(Hello())标明为public,否则编译器会报错。
2.实现Java中的"多重继承",具体看下面代码:
class Father{} interface Human{} interface Boy{} class Me extends Father implements Human,Boy{}
如上,我继承(extends)自父亲,但我的身份却可以是“人类(human)”或者“男孩(boy)”。同样,在java中,只能继承一个一般的Class(non-interface即非接口类),但却可以实现多个interface,也就是说“interface让你拥有多个身份”。这当然更有利于多态的应用。
2-1.interface可以也只能是继承另一个接口,但不是class类
class A{} abstract class B{} interface C{} //!interface D extends A{} //!interface D extends B{} interface D extends C{}//接口只能继承接口
2-2.下面说明同时实现多个接口时需要注意的事项:
interface Man{void fight();} interface Woman{void cooking();} class Father{ public void fight(){} } class Mother{ public int cooking(){return 53;} } class Child extends Father implements Man,Woman{ public void cooking(){}//大家注意,为什么这儿implements了Man和Woman两个interface却单单只实现了Woman的一个接口呢? } //!class Child1 extends Mother implements Woman{}//为什么这个会报错呢? public class Test { static void fighting(Man man){//这儿之所以可以用man来调用是因为下面会进行向上转型,即Man的derived class reference传到这里,下同。 man.fight(); } static void cookings(Woman woman){ woman.cooking(); } public static void main(String[] args) { Child c=new Child(); fighting(c);//向上转型,因为上面接参的是Hero的base class cookings(c); } }
2-2-1.class Child为什么实现了 Man和Woman 两个interface却只实现了Woman一个接口呢?
因为Child还同时继承了一个Father类,而Father中恰好有一个一模一样的void fight(),所以,在继承的同时,“爸爸替儿子”自动的实现了fight(),不用“儿子”亲自动手。
但是要注意,必须要完全相同才行!(即需要同参数列表、同返回值)
2-2-2. Child1不能再写下去是因为他所继承的Mother类的void cooking()与它所实现的Woman接口中的int cooking()产生冲突。两者名称相同,但是返回值不一样,导致编译器不知道该使用哪一个或者应该重写等,所以会报出错误。
所以需要提醒的是:尽量不要实现含同名参数的interface,或者就干脆不要写同名的函数。
3.产生常量:由于interface中的数据成员会自动成为public static final
public interface Months{ int JANURAUY=1;//再次说明,常量都要全部用大写,语义间用下划线分开如: VAL_XX int FEBRUARY=2; int MARCH=3; }
使用的时候,直接 Months.JANURAUY*10就可以。另:因为interface的常量数据成员是static静态的,所以当你首次使用这个interface时,就会自动初始化里面的数据,不管你使用多少次它的数值都不会再变了
public interface Vals{ int VAL_A=(int)(Math.random()*10); }
我们看到,VAL_A是由随机数得值的,但当你第一次使用它时,VAL_A被赋予了一个随机数3.14,但以后不管你用多少次,都只是同一个数3.14。
4.interface可以互相嵌套,既可以嵌在class中,也可以嵌在另一个interface中。
4-1.当某一个interface嵌套到了另一个interface中时,它一定会变成public,且无法标记为private
4-2.当你实现某个interface时,根本无须实现嵌套在它里面的Other interfaces
4-3.private interface是无法在它所定义的class之外被发现的
发表评论
-
JavaWeb 之 session
2017-10-12 15:06 0一、Session ... -
git clone命令
2017-10-10 15:30 1127git clone 命令参数: usage: gi ... -
Mac下idea快捷键
2017-10-09 17:21 395IntelliJ IDEA For Mac 快捷 ... -
浅谈java中的堆栈(二)
2016-12-16 17:50 0Java 中的堆和栈 Java把内存划分成两种:一种是 ... -
浅谈java中的堆栈(一)
2016-12-16 17:28 310Java把内存分成两种,一种叫做堆内存,一种叫做栈内存:在 ... -
导出excel的两种方式(二)
2015-12-17 15:26 7861.调用类如下: @RequestMapping(&quo ... -
导出excel的两种方式(一)
2015-12-17 15:10 6711.导出excel方法调用: import org.apa ... -
正确选择使用字符串或者数字
2015-12-08 10:53 439在我多年的开发经验中,经常发现的一个情况就是,很多项目的对象 ... -
mybatis在xml文件中处理大于号小于号的方法
2015-06-11 17:30 395第一种方法: 用了转义字符把>和<替换掉,然 ... -
Java中serialVersionUID
2015-06-11 17:31 473serialVersionUID作用: ... -
为什么使用redis
2015-06-11 17:41 471先解释一下软件编程中常见的一些概念: 抽象先于具象。这个抽象 ... -
mybatis入门三之使用MyBatis Generator生成DAO
2015-06-10 18:06 871虽然MyBatis很方便,但是想要手写全部的mapper还是很 ... -
mybatis入门二之添加ehcache缓存支持
2015-06-10 17:57 513为了提高MyBatis的性能, ... -
mybatis入门一
2015-06-10 17:53 328ibatis的3.X版本改名了,叫做MyBatis,暂且不讨论 ... -
spring+mybatis优缺点
2015-06-10 16:43 1611一、mybatis的优缺点: ... -
struts1与struts2
2015-06-10 15:39 3661.struts2不是struts1的升级,而是继承的webw ... -
Java语言滴transient
2015-03-26 21:48 487transient说明一个属性是临时的,不会被序列化。详看事例 ... -
Java语言滴Interface(二)
2015-03-26 21:03 4901.看代码: public interface Anima ...
相关推荐
从提供的文件信息来看,该文件名为《Java语言程序设计.pdf》,主要涉及Java语言程序设计的相关知识。以下是从文件【部分内容】中提取并解释的知识点: 1. Java语言程序设计的基本概念:Java是一种面向对象的编程...
在Java编程语言中,接口(Interface)是一种定义行为规范的关键元素,它允许我们实现多继承。接口是完全抽象的,不包含任何方法的实现,只有方法的声明、常量定义以及默认方法。Java中的接口提供了以下核心知识点: ...
JNI(java native interface) 简体中文:do.chuan@gmail.com 翻译版 英文版:Addison.Wesley.Java.Native Interface 希望对大家有帮助...
### JNI(Java Native Interface)中文手册关键知识点解析 #### 一、前言及背景 JNI(Java Native Interface)是Sun Microsystems公司定义的一套标准接口,用于实现Java代码与本地代码(通常是C或C++)之间的交互。...
八、JNI(JAVA Native Interface) JNI允许JAVA代码调用C/C++的原生代码,实现了JAVA与其他语言的交互。 九、JAVA开发工具(JDK)与IDE JDK是JAVA开发的核心组件,包含了JAVA编译器、JVM和各种开发工具。常见的JAVA...
Java Native Interface(JNI)是Java平台的一个重要组成部分,它允许Java代码和其他语言写的代码进行交互。这个"Java Native Interface Programmers Guide and Specification(Exp)"很可能是一份详细解释JNI编程指南...
Java Native Interface(JNI)是Java开发中的一个重要概念,它允许Java代码与其他语言编写的代码进行交互,尤其是与C或C++编写的本地应用程序接口(API)进行交互。JNI在Java应用程序中扮演着桥梁的角色,使得Java...
THIS book covers the Java™ Native Interface (JNI). It will be useful to you if you are interested in any of the following: • integrating a Java application with legacy code written in languages such...
但这并不代表Java的interface就比较差,因为interface的观念较简单,全部动态的抽象函数也正代表着Java为一纯物件导向语言。与C++不同的是,C++考虑许多执行效率的问题,所以语言本身就变的较复杂化,同时C++的...
《JAVA语言中文教程》是一份详尽的编程学习资料,主要介绍了JAVA语言的基础知识与面向对象的编程概念,适合初学者以及有一定编程基础的学习者深入理解JAVA语言的特性和编程技巧。 ### 第一章:JAVA概述 #### JAVA...
在Java编程语言中,接口(Interface)是一种非常重要的特性,它扮演着定义行为规范的关键角色。接口是完全抽象的类型,允许我们定义一组方法签名,但不提供具体实现。这使得接口成为实现多继承的手段,因为Java不...
以及JNI(Java Native Interface),用于在Java代码中调用C/C++的库函数,实现Java与其他语言的交互。 总的来说,《Java语言程序设计》第8版是一本全面而深入的教程,无论你是Java新手还是有经验的开发者,都能从中...
"java语言基本语法" Java语言基本语法是Java编程语言的基础,包括关键字、数据类型、运算符、控制结构、方法、异常处理等方面。下面是Java语言基本语法的知识点: 关键字 Java语言中有一些关键字,它们是Java...
"Java语言基础" Java是一种广泛使用的高级编程语言,Java课程旨在介绍Java语言的基础知识。本文档将详细介绍Java语言的基础知识,包括Java语言基础、Java程序设计、Java源程序、Java程序的编译与运行等。 Java语言...
8. **其他特性**:可能还包含枚举类型、注解、反射、JNI(Java Native Interface)等Java的高级特性的使用示例。 这些源码不仅是理论知识的实践验证,也是提升编程技能和解决实际问题的宝贵资料。通过阅读和运行...
Java Native Interface (JNI) 是Java平台的一项强大特性,允许应用程序结合使用C、C++等其他编程语言编写的本地代码以及Java语言代码。这一功能让程序员能够在利用Java平台优势的同时,不必舍弃对遗留代码的投资。...