Java中接口的特点
Java接口在1.8之后发生了重大变化。所以谈Java接口特点可以分为1.8版本之前和1.8版本之后。
1.8版本之前的特点:
- 接口里只能有静态全局常量和public修饰的抽象方法。
- 为了代码简洁,在接口中方法可以不用public和abstract修饰,但是编译后的方法仍然是public abstract类型的方法。全局常量也可以用public static fianl修饰,同样编译后仍然为public static final类型。
下面代码演示了一个如何定义一个1.8版本之前的接口:
public interface IFlyable
{
String info = "静态常量";
void fly();
}
上面代码尽管没有用public static final修饰info,但编译后info为静态全局常量,外部不能修改值。同样fly()没有用public abstract修饰,但编译结果是public abstract类型。
下面是测试代码:
package org.lyk.vo; import org.lyk.intefaces.*; public class Bird implements IFlyable
{
public void fly()
{
System.out.println("鸟儿在飞翔");
}
}
package org.lyk.main; import org.lyk.intefaces.*;
import org.lyk.vo.*; public class Hello
{
public static void main(String[] args)
{
IFlyable flyAble = new Bird();
flyAble.fly();
System.out.println(IFlyable.info);
}
}
1.8 版本之后的特点:
- 打破了1.8之前接口里只能有全局静态常量和public抽象方法的限制。允许接口中用default关键字修饰的实体方法出现(该方法在子类中可以被覆写)
- 也允许在接口中定义public static 类型的实体函数,该静态由接口调用。
package org.lyk.intefaces; public interface IFlyable
{
public static final String info = "静态常量";
public abstract void fly(); public static void showSomething()
{
System.out.println("这是Java1.8才支持的静态函数,该函数只能由接口调用");
} default void printSomething()
{
System.out.println("这是Java1.8才支持的default实体函数.该方法可以在子类中被覆写。");
}
}
测试代码:
package org.lyk.vo; import org.lyk.intefaces.*; public class Bird implements IFlyable
{
public void fly()
{
System.out.println("鸟儿在飞翔");
} public void printSomething()
{
System.out.println("在子类中覆写接口方法");
}
}
package org.lyk.main; import org.lyk.intefaces.*;
import org.lyk.vo.*; public class Hello
{
public static void main(String[] args)
{
IFlyable flyAble = new Bird();
flyAble.fly();
System.out.println(IFlyable.info); flyAble.printSomething();
IFlyable.showSomething();
}
}
后记: 我想,Java1.8之所以做出如此大的设计上的改变,应该是为了向.net学习,目的是支持流(stream)。因为Java一开始设计的时候没有考虑到stream这种场景出现,现在要在接口中增加功能,就必须打破原有限制。
Java中接口的特点的更多相关文章
- 转载 - java中接口的向上转型。和多态性
发现一篇对接口总结很精简的文章 1.在java中接口就是一个完全抽象的类,跟抽象类一样不能产生对象,但是可以作为对象的引用,可以由其实现类向上转型,它就跟超类一样, 向上转型了,可以很好的利用接口,可 ...
- Java中接口和抽象类的比較
Java中接口和抽象类的比較-2013年5月写的读书笔记摘要 1. 概述 接口(Interface)和抽象类(abstract class)是 Java 语言中支持抽象类的两种机制,是Java程序设计 ...
- 浅谈Java中接口与抽象类的异同
浅谈Java中接口与抽象类的异同 抽象类和接口这两个概念困扰了我许久,在我看来,接口与抽象类真的十分相似.期间也曾找过许许多多的资料,参考了各路大神的见解,也只能是简简单单地在语法上懂得两者的区别.硬 ...
- 关于java中接口定义常量和类定义常量的区别
/** * * @author YZJ * @Description java中定义常量的最佳方法 */ public final class Contants{ /** * @Description ...
- java中接口之间的继承
最近在读一些源码的时候突然发现了一个很神奇的东西,它的原始形态是这样的: 在这行代码中,BlockingDeque.BlockingQueue和Deque是三个接口.刚发现这个问题时,我是十分吃惊的, ...
- JAVA中接口与抛出异常的相关知识
1.接口概念:接口可以理解为一种特殊的类,由全局常量和公共的抽象方法所组成. 类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只 ...
- java中接口和继承的区别
实际概念区别:区别1:不同的修饰符修饰(interface),(extends)区别2:在面向对象编程中可以有多继承!但是只支持接口的多继承,不支持'继承'的多继承哦而继承在java中具有单根性,子类 ...
- Java中 接口是如何实现多态的特性的
Java中多态是个很难理解的概念,但同时又是非常重要的概念,Java三大特性(封装.继承.多态)之一,我们从字面上理解,就是一种类型的多种状态,一下通过卖小汽车的例子再次说明什么是多态,其中利用到了接 ...
- java中接口的定义
使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成.定义接口的基本格式如下: [修饰符] interface 接口名 [ ...
- 浅谈java中接口与抽象类之间的异同
刚学习java的时候,总觉得接口和抽象类很像,但又说不上具体有什么区别.今天静下来,翻翻书,查查资料,做个小结.首先举两个例子,看看interface和abstract class 在“外形”上有啥异 ...
随机推荐
- day 64 Django 第五天 多表对多表的对应关系ORM
一.查 设置 Author表 在 views文件中 # 作者表 class Author(models.Model): id =models.AutoField(primary_key=True) ...
- vhosetuser 和 vhostuservlient 差异
Open vSwitch支持的vHost-user类型 在Open vSwitch中vHost User通过socket进行通信,模式为client-server,其中server端负责创建/管理/销 ...
- 975. Odd Even Jump
You are given an integer array A. From some starting index, you can make a series of jumps. The (1 ...
- python 匿名函数 lambda 的使用
在python中,lambda允许用户快速定义单行函数,当然用户也可以按照典型的函数定义完成函数.lambda的目的就是简化用户定义使用函数的过程. In [6]: s = lambda x: x+1 ...
- 用0x077CB531计算末尾0的个数
http://www.matrix67.com/blog/archives/3985 unsigned int v; // find the number of trailing zeros in ...
- Kafka网络模型分析
Kafka基于高吞吐率和效率考虑,并没有使用第三方网络框架,而且自己基于java nio封装的,总体网络模型如下: Broker的内部按照SEDA模型处理网络请求,处理过程如下: Accept Thr ...
- maven添加仓库没有的jar包
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.4.0 -Dpackaging= ...
- 电脑网络IP固定地址自动改变!
今天电脑的固定IP地址每次重启设备,会自动改变一次.所以每次重启电脑都要手动重设IP地址.网关.DNS及高级选项中的ip设置. 高级选项中的ip设置每次都有2个ip,都要我删除一个.我都崩溃了,还以为 ...
- 通过sessionStorage来根据屏幕宽度变化来加载不同的html页面
因为项目需要,分别写了移动端和PC端的两个html页面,现在需要根据不同的屏幕宽度来加载对应的页面. 先说一下本人的思路-- 刚开始我直接在加载页面的时候判断屏幕宽度,然后加载相应的页面,大家是不是也 ...
- django 的ajax 请求,使用form的验证机制。
所有的form都需要在后台验证,前台验证是不可靠的,django的验证是后台验证,前台提示错误信息. js验证是在前台的,无需发送消息给后台,但安全性不可靠,强调的是用户体验. 要求,使用弹出框,弹出 ...