【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的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候 ...
随机推荐
- TestNG--入门介绍教程
阅读目录 TestNG介绍 在Eclipse中在线安装TestNG 在Eclipse中离线安装Testng TestNG最简单的测试 TestNG的基本注释 TestNG中如何执行测试 使用testt ...
- java修饰符public final static abstract transient
JAVA 修饰符public final static abstract transient 关键字: public final static abstract ... 1.public prot ...
- Java重定向和转发的路径问题
路径问题: ①相对路径和绝对路径: 绝对路径: 绝对路径是以/开头的路径! 相对于当前服务器的绝对路径: 如果是服务器解析,那么/ ...
- 集合-TreeSet-Comparable
Student类:name.age属性 1 package com.bjpowernode.test01_set2_Comparable; /* * T: type */ public class S ...
- 【SQL*PLUS】常规使用
登陆SQL*PLUS sqlplus sys/Manager123 as sysdba 创建数据库实例并挂载数据库,此时加载数据库文件,但数据表不能访问. SQL>startup mount; ...
- TortoiseSVN使用经验
TortoiseSVN使用经验.. SVN新下载的项目(有感叹号和对勾)正常的-- 没有标识--重启一下电脑, ---------------ipConfig----- SVN是用哪个IP地址chec ...
- HashMap和ConcurrentHashMap流程图
本文表达HashMap和ConcurrentHashMap中的put()方法的执行流程图,基于JDK1.8的源码执行过程. HashMap的put()方法: ConcurrentHashMap的put ...
- MySQL(三)之SQL语句分类、基本操作、三大范式
一.SQL语句的分类 DML(Data Manipulation Langauge,数据操纵/管理语言) (insert,delete,update,select) DDL(Data ...
- Docker打包 Asp.Net Core应用,在CentOS上运行
本文主要介绍下运用docker虚拟技术打包Asp.net core应用. Docker作为一个开源的应用容器引擎,近几年得到广泛的应用,使用Docker我们可以轻松实现应用的持续集成部署,一次打包,到 ...
- Asp.net mvc3的“从客户端中检测到有潜在危险的 Request.Form 值”问题解决
Asp.net mvc3的“从客户端(content_v=\",<p>\n\t<imgalt=\"\" src...\")中检测到有潜在危险的 ...