【java】聊聊java里的接口
接口的概念
├─myInterface.java └─Myclass.java
myInterface.java :
public interface myInterface {
int function ( int arg ) ;
}
public class Myclass implements myInterface{
public int function(int arg) {
;
}
}
接口的一些特性
public interface myInterface {
private int a;
}
Illegal modifier for the interface field myInterface.a; only public, static & final are permitted
对比是学习的一种方式,下面我对接口的介绍,将在一系列的对比中展开
接口和超类的差异
public class superClass { ... }
public class subClass extends superClass { ...}
public interface myInterface { ... }
public class Myclass implements myInterface{ ...}
超类是一个“模板”,而接口是一种“契约”

The type Myclass must implement the inherited abstract method myInterface.function(int)

超类继承

接口实现

public class SuperClass {
public String getMoney () {// 获取金钱
return "Money";
}
public String getHouse () { // 获取房子
return "house";
}
public String getCar () { // 获取车子
return "car";
}
}
public class Myclass extends SuperClass{
public String getAll () {
return getMoney() + " " + getCar() + " " + getHouse();
}
public static void main(String args []) {
Myclass me = new Myclass();
System.out.println(me.getAll());
}
}
Money car house
public interface myInterface {
public String getMoney ();
public String getHouse ();
public String getCar ();
}
Myclass.java:
public class Myclass implements myInterface{
public String getMoney () {
return "Money";
}
public String getHouse () {
return "house";
}
public String getCar () {
return "car";
}
public String getAll () {
return getMoney() + " " + getCar() + " " + getHouse();
}
public static void main(String args []) {
Myclass me = new Myclass();
System.out.println(me.getAll());
}
}
Money car house
接口和抽象类的差异
abstract class AbstractClass {
public abstract int function ();
}
public class MyClass extends AbstractClass {
public int function() {
;
}
}
接口和抽象类的共同点
接口和抽象类的不同点
接口实现/接口继承和类继承的差异
一个类可以实现多个接口
// 没有这种写法,这是非法行为
public class MyClass extends SuperClass1,SuperClass2 { }
public class MyClass implements interface1, interface2 { }
├─TechXiaoBai.java // 主力类 ├─Blog.java // 接口1 └─Education.java // 接口2
public class TechXiaoBai implements Blog, Education {
// 作为一名技术小白每天要做的事情
public void study() { }
public void writeArticle() { }
}
public interface Blog {
void writeArticle (); // 写文章
}
public interface Education {
void study(); // 学习
}

java允许“接口多继承”
├─TechXiaoBai.java // 主力类 ├─Blog.java // 接口1 ├─Education.java // 接口2 ├─Undergraduate.java // 新增被Education接口继承的接口,接口2.1 └─Postgraduate.java // 新增被Education接口继承的接口,接口2.2
// “本科生”接口
public interface Undergraduate {
void learnBasicKowledge(); // 学习基础知识
}
// 研究生接口
public interface Postgraduate {
void doScientificRearch(); // 搞一搞科研啦
}
public interface Education extends Undergraduate, Postgraduate{
void study(); // 学习
}
public class TechXiaoBai implements Blog, Education {
// 每天要做的事情
public void study() { }
public void writeArticle() { }
public void learnBasicKowledge() { } // 新增方法
public void doScientificRearch() { } // 新增方法
}

public interface Education extends Undergraduate, Postgraduate{
void study(); // 学习
}
public interface Education extends Undergraduate, Postgraduate{
void study(); // 学习
void learnBasicKowledge(); // 学习基础知识
void doScientificRearch(); // 搞一搞科研啦
}
接口存在的意义
public interface Comparable<T>
{
int compareTo(T other) // parameter has type T
}
import java.util.Arrays;
public class Student implements Comparable<Student>{
private int score; // 每个学生的分数
public Student (int score) {
this.score = score;
}
public int getScore () { // 获取每个学生对象的分数
return this.score;
}
@Override
public int compareTo(Student other) { // 实现Comparable接口约定的compareTo方法
return this.score - other.score;
}
public static void main (String [] args){
Student [] stuArray = ]; // 声明Student类型的数组
stuArray[] = ); // 将三个Student对象赋给数组
stuArray[] = );
stuArray[] = );
stuArray[] = );
Arrays.sort(stuArray); // 进行从小到大的排序
; i<stuArray.length; i++){
System.) +"个学生对象的分数:" + stuArray[i].getScore());
}
}
}
排序后数组里第1个学生对象的分数: 排序后数组里第2个学生对象的分数: 排序后数组里第3个学生对象的分数: 排序后数组里第4个学生对象的分数:
){
// 对a[i]和a[j]进行排序
}
【java】聊聊java里的接口的更多相关文章
- JVM:从实际案例聊聊Java应用的GC优化
原文转载自美团从实际案例聊聊Java应用的GC优化,感谢原作者的贡献 当Java程序性能达不到既定目标,且其他优化手段都已经穷尽时,通常需要调整垃圾回收器来进一步提高性能,称为GC优化.但GC算法复杂 ...
- [JAVA设计模式]第一部分:接口、抽象类、设计原则
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- JAVA的免费天气api接口调用示例
step1:选择本文所示例的接口"免费天气api" url:https://www.juhe.cn/docs/api/id/39/aid/87 step2:每个接口都需要传入一个参 ...
- Java字节码里的invoke操作&&编译时的静态绑定与动态绑定
一个一直运行正常的应用突然无法运行了.在类库被更新之后,返回下面的错误. Exception in thread "main" java.lang.NoSuchMethodErro ...
- Java 8新特性之接口改善(八恶人-1)
Daisy Donergue 多莫歌·黛西 “By woman, you mean her?” 她也能叫女人? Java 8在13年9月发布,写这篇博文的时间已经是17年12月份了.来的有点晚,但是有 ...
- Java程序设计8——抽象类、接口与内部类
1 抽象类 当编写一个类时,常常会为该类定义一些方法,这些方法用以描述该类的行为方式,那么这些方法都有具体的方法体.但在某些情况下,某个父类并不需要实现,因为它只需要当做一个模板,而具体的实现,可以由 ...
- 聊聊Java并发面试问题之公平锁与非公平锁是啥?
一.什么是非公平锁? 先来聊聊非公平锁是啥,现在大家先回过头来看下面这张图. 如上图,现在线程1加了锁,然后线程2尝试加锁,失败后进入了等待队列,处于阻塞中.然后线程1释放了锁,准备来唤醒线程2重新尝 ...
- Java集合框架之Map接口浅析
Java集合框架之Map接口浅析 一.Map接口综述: 1.1java.util.Map<k, v>简介 位于java.util包下的Map接口,是Java集合框架的重要成员,它是和Col ...
- Java基础之抽象类与接口
Java基础之抽象类与接口 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候 ...
随机推荐
- Mac实用操作技巧(六)
Night Shift,保护你夜间的眼睛 之前在Mac上有一款很著名的软件叫f.lux,这款软件会根据Mac的时间和地理位置,来自动切换屏幕亮度,如果进入晚上则调成暖色,白天就切换成普通颜色.现在Ma ...
- Linux学习总结(十三)—— CentOS用户组管理:创建用户组、修改用户组、删除用户组
文章首发于[博客园-陈树义],请尊重原创保留原文链接. 在Linux系统里,有两个系统文件与用户组密切相关,它们分别是:/etc/group./etc/gshadow. /etc/group:存储了用 ...
- Python学习笔记2:构造序列:列表推导和生成器表达式
欢迎访问个人网站:www.comingnext.cn 1. 关于Python内置序列类型 a. 按能否存放不同类型的数据区分 容器序列: list.tuple 和collections.deque这些 ...
- 【PL/SQL Developer】动态执行表不可访问,本会话的自动统计被禁止
在执行菜单里你可以禁止统计,或在v_$session,v_$sesstat 和 v_$statname 表里获得select权限 解决办法 [oracle@localhost ~]$ sqlplus ...
- MySql按每日、每周、每月分组统计数据
select DATE_FORMAT(create_time,'%Y%u') weeks,count(caseid) count from tc_case group by weeks; select ...
- Java 的概述
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是有SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE,JavaEE,JavaME ...
- tensorflow安装调试总结(持续更新)
这段时间需要部署tensorflow到linux上,由于堡垒机不能连外网,所以pip.apt-get.wget.git统统不能用,然后就是各种调试了,下面整理了一些遇到的问题和解决方案,供大家参考(C ...
- shell之 printf 输出语句
总结: (1)printf 使用引用文本或空格分隔的参数,外面可以在printf中使用格式化字符串,还可以制定字符串的宽度.左右对齐方式等.默认printf不会像 echo 自动添加换行符,我们可以手 ...
- [知了堂学习笔记]_JSON数据操作第2讲(JSON的封装与解析)
上一讲为大家讲了什么是JSON,那么这一讲为大家带来了在WEB项目中JSON的用法,也就是JSON的封装与解析. 此图是数据库中的部分内容 一.JSON封装 所谓的JSON封装,指的是在Servlet ...
- Linux 查看进程
1.ps 显示进程信息,参数可省略 -aux 以BSD风格显示进程常用 -efH 以SystemV风格显示进程 -e , -A 显示所有进程 a 显示终端上所有用户的进程 x 显示无终端进程 u显示详 ...