java基础篇 之 接口
组合接口时的名字冲突:
看下面这段代码:
interface I1 {
int f();
}
interface I2 {
void f();
}
interface I3 {
int f(int a);
}
class C {
public void f() {
System.out.println(1);
}
}
class C1 extends C implements I2 {
}
class C2 extends C implements I3 {
@Override
public int f(int a) {
return 1;
}
}
//这里报错了,是因为覆盖,实现跟重载被混在了一起
//C3继承了C,这个时候就有了一个void f()的方法
//C3实现了I1,就不得不实现它的int f()
//这个时候,C3就会出现两个同名函数,这显然是错误的
//class C3 extends C implements I1 {
//
//}
接口中的域:
因为放入接口中的任何域都是自动static和final的,所以接口就成了一种很便捷的用来创建常量的工具。
public class Interface {
// 成员变量省略了 public static final
// 接口不能初始化,如果要访问接口中的属性,只能通过类名直接调用,所以必须public+static
// 接口中的字段会被所有接口的实现类共享,所以不能被某一个子类所改变,以避免对其他子类造成影响
// 所以必须final
String ONE = "1";
String TWO = "2";
}
嵌套接口:
class Test {
private interface B {
void f();
}
class BImpl implements B {
@Override
public void f() {
System.out.println(1);
}
}
public B getB() {
return new BImpl();
}
}
public class Interface {
public static void main(String[] args) {
Test t = new Test();
t.getB();
}
}
我们看这种情况,提出一个问题,t.getB();的返回值我们要怎么接收呢?返回的是一个类中的私有的接口类型的对象。我们直接t.B肯定是不行的。这个时候,我们只能将返回值交给有权使用它的对象,所以我们要多定义一个属性或者方法
class Test {
private interface B {
void f();
}
class BImpl implements B {
@Override
public void f() {
System.out.println(1);
}
}
public B bRef;
public B getB() {
return new BImpl();
}
}
public class Interface {
public static void main(String[] args) {
Test t = new Test();
t.bRef = t.getB();
}
}
java基础篇 之 接口的更多相关文章
- 金三银四跳槽季,BAT美团滴滴java面试大纲(带答案版)之一:Java基础篇
Java基础篇: 题记:本系列文章,会尽量模拟面试现场对话情景, 用口语而非书面语 ,采用问答形式来展现.另外每一个问题都附上“延伸”,这部分内容是帮助小伙伴们更深的理解一些底层细节的补充,在面试中可 ...
- java基础篇---I/O技术(三)
接上一篇java基础篇---I/O技术(二) Java对象的序列化和反序列化 什么叫对象的序列化和反序列化 要想完成对象的输入或输出,还必须依靠对象输出流(ObjectOutputStream)和对象 ...
- 小白—职场之Java基础篇
java基础篇 java基础 目录 1.java是一种什么语言,jdk,jre,jvm三者的区别 2.java 1.5之后的三大版本 3.java跨平台及其原理 4.java 语言的特点 5.什么是字 ...
- java基础篇1
JAVA基础篇1 注释 单行注释 //这是一个单行注释,由两个斜杠组成,不能嵌套多行注释 多行注释 /*这是一个 多行注释 ,//里面不能嵌套多行注释, 但是可以嵌套单行注释*/ 文档注释 /**ja ...
- Java基础篇(JVM)——字节码详解
这是Java基础篇(JVM)的第一篇文章,本来想先说说Java类加载机制的,后来想想,JVM的作用是加载编译器编译好的字节码,并解释成机器码,那么首先应该了解字节码,然后再谈加载字节码的类加载机制似乎 ...
- java基础篇---I/O技术
java基础篇---I/O技术 对于任何程序设计语言而言,输入输出(I/O)系统都是比较复杂的而且还是比较核心的.在java.io.包中提供了相关的API. java中流的概念划分 流的方向: 输 ...
- java基础篇---HTTP协议
java基础篇---HTTP协议 HTTP协议一直是自己的薄弱点,也没抽太多时间去看这方面的内容,今天兴致来了就在网上搜了下关于http协议,发现有园友写了一篇非常好的博文,博文地址:(http: ...
- Java基础-通过POI接口处理xls
Java基础-通过POI接口处理xls 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Java基础-Collection子接口之Set接口
Java基础-Collection子接口之Set接口 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 学习Collection接口时,记得Collection中可以存放重复元素,也可 ...
随机推荐
- Daily Scrum 1/11/2016
Zhaoyang & Minlong: Took and edited the video which introduced our APP. Yandong: Summarized bugs ...
- 杭电 How far away ?
There are n houses in the village and some bidirectional roads connecting them. Every day peole alwa ...
- Flask基础-01.Flask简介
Flask简介 Web应用程序作用 Web(World Wide Web)诞生最初的目的,是为了利用互联网交流工作文档. 关于Web框架 1. 什么是Web框架? 1. 已经封装好了一段代码,协助程序 ...
- 15分钟从零开始搭建支持10w+用户的生产环境(二)
上一篇文章,把这个架构的起因,和操作系统的选择进行了详细说明. 原文地址:15分钟从零开始搭建支持10w+用户的生产环境(一) 二.数据库的选择 对于一个10W+用户的系统,数据库选择很重要. 一 ...
- tensorflow1.0 队列FIFOQueue管理实现异步读取训练
import tensorflow as tf #模拟异步子线程 存入样本, 主线程 读取样本 # 1. 定义一个队列,1000 Q = tf.FIFOQueue(1000,tf.float32) # ...
- Docker 中如何安装配置 Nginx
拉取 nginx 最新版镜像,然后简单启动一个 nginx 容器: docker pull nginx:latest docker run --name nginx01 -d -p 80:80 ngi ...
- Java一个简单的贪吃蛇
Java一个简单的贪吃蛇 虽然GUI已经要淘汰了,但是手动写写界面还是有助于理解语法的,像构造函数 ,函数调用,内部类,继承,接口.有助于半初学者强化理解. 直接上代码 游戏主体类: package ...
- 2019-2020-1 20199308《Linux内核原理与分析》第八周作业
<Linux内核分析> 第七章 可执行程序工作原理 7.1 知识点 1.目标文件:编译器生成的文件,"目标"指平台,它决定了编译器使用的机器指令集. 2.目标文件格式: ...
- 数据包的抓取[tcpdump]的应用
[root@server ~]# yum install tcpdump [root@server ~]# yum install wireshark 1.默认情况下,直接启动tcpdump将监视第一 ...
- 2019-2020-1 20199328《Linux内核原理与分析》第六周作业
使用gdb跟踪分析一个系统调用内核函数 首先我们删除本身的menu目录,并从github上克隆一个menu,并进行编译 编译过程 现在找到test.c文件,加入上个实验中做的getPid()方法 利用 ...