Day06_31_接口(Interface)
java 接口(Interface)
接口和抽象类的区别?
子类只能通过extends关键字去继承抽象类(Abstract),子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类)。
定义一个接口实现类,实现了某个接口,那么必须重写接口中的全部方法,一个类可以实现多个接口,而一个类只能继承一个抽象类。
接口是公开的,不能有私有的方法或变量,接口中的所有方法都没有方法体,通过关键字interface实现。
接口中所有的方法都是抽象的,但抽象类可以包含部分具体方法的实现,所以,在一些场合下抽象类比接口更有优势。
实现接口的关键字为implements,继承抽象类的关键字为extends。一个类可以实现多个接口,但一个类只能继承一个抽象类。所以,使用接口可以间接地实现多重继承。
接口强调特定功能的实现,而抽象类强调所属关系。
接口成员变量默认修饰为 public static final,必须赋初值,不能被修改;接口所有的成员方法默认修饰 public abstract的。
抽象类中成员变量默认default,可在子类中被重新定义,也可被重新赋值;抽象方法被abstract修饰,不能被private、static、synchronized和native等修饰,必须以分号结尾,不带花括号。
接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量
接口只能做方法申明,抽象类中可以做方法申明,也可以做部分方法实现
抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。
接口描述了方法特征不给出实现,一方面解决了java的单继承问题,另一方面增强了可接插性。
抽象类提供了部分具体方法实现,抽象类是不能实例化的,抽象类的作用主要是可以把公共的代码移植到抽象类中,便于使用。
定义接口的语法
[访问控制修饰符] interface 接口名 {
// 常量 // 抽象方法
}
// interface 定义接口, 接口都需要有实现类
public interface UserService { // public abstract 是默认存在的
public abstract void run(String name); //public abstract 可以省略不写
void serviceRun(int a); void add(String name);
void delete(String name);
void update(String name);
void query(String name); } // 实现类 //UserService 实现类 // 实现了接口的类,必须要重写接口中的方法。 // 可以实现多个接口
public class UserServiceImpl implements UserService,TimeService { @Override
public void run(String name) { }
}
接口需要注意
定义常量 (接口中的常量必须用 public static final修饰,但是是可以省略的)
定义抽象方法必须用 public abstract修饰,但是可以省略,默认存在。
一个类去实现一个接口必须用 implements 关键字 不能使用 extends 关键字;
接口中没有构造方法
接口的作用
可以使项目分层,所有层都面向接口开发,开发效率提高了。
接口代码和代码的耦合度降低,灵活性提高。
接口和抽象类都能完成某个功能的时候优先选择接口,因为接口可以多实现多继承。
并且一个类除了实现接口之外还可以去继承其他类(保留了类的继承)
Day06_31_接口(Interface)的更多相关文章
- java中的接口interface
关于接口 接口描述了实现了它的类拥有什么功能.因为Java是强类型的,所以有些操作必须用接口去约束和标记.接口作为类的能力的证明,它表明了实现了接口的类能做什么. 类似与class,interface ...
- php中的抽象类(abstract class)和接口(interface)
一. 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 2 ...
- 14 接口-interface的定义与实现
接口的基本语法一: 1.使用interface 定义 2.接口当中的方法都是抽象方法 3.接口当中的方法都是public权限 接口的定义: interface USB { public void re ...
- C#编程利器之三:接口(Interface)【转】
C#编程利器之三:接口(Interface) C#接口是一个让很多初学者容易迷糊的东西,用起来好象很简单,定义接口,然后在里面定义方法,通过继承与他的子类来完成具体的实现.但没有真正认识接口的作用的时 ...
- 为什么不能把委托(delegate)放在一个接口(interface)当中?
stackoverflow上有人问,为什么不能把委托放在一个接口当中? 投票最多的第一个答案第一句话说,“A Delegate is just another type, so you don't g ...
- java之接口interface
接口 1.多个无关的类可以实现同一个接口 2.一个类可以实现多个无关的接口 3.与继承关系类似,接口与实现类之间存在多态性 4.定义java类的语法格式 < modifier> class ...
- 【Java 基础篇】【第六课】接口interface
Java提供的这个interface的语法,目的就是将接口从类中剥离出来,构成独立的主体. 首先加入我们定义了这个杯子接口: interface Cup { void addWater(int w); ...
- TypeScript学习指南第二章--接口(Interface)
接口(Interface) TypeScript的核心机制之一在于它的类型检查系统(type-checker)只关注一个变量的"模型(shape)" 稍后我们去了解这个所谓的形状是 ...
- Go语言学习笔记(四)结构体struct & 接口Interface & 反射
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...
随机推荐
- python常用内置方法index\extend\count\reverse\sort
定义列表:(有2个值相同) a = ['XiaoBao','aiaoHao','biaoLiao','ciaoQing','eiaoLi','QiBao','biaoLiao'] 列表的索引: fir ...
- java 阿里云短信发送
记录自己的足迹,学习的路很长,一直在走着呢~ 第一步登录阿里云的控制台,找到此处: 点击之后就到此页面,如果发现账号有异常或者泄露什么,可以禁用或者删除 AccessKey: 此处方便测试,所以就新 ...
- MySQL学习笔记(五)
倒数第二天!冲冲冲!!! 一.索引 一个表里面可以有多个索引. 1. 索引的作用:约束与加速查找 无索引:从前到后依次查找 有索引:会为索引列创造一个额外文件(以某种格式存储).在使用索引进行查找时, ...
- ElasticSearch学习笔记(超详细)
文章目录 初识ElasticSearch 什么是ElasticSearch ElasticSearch特点 ElasticSearch用途 ElasticSearch底层实现 ElasticSearc ...
- 《C++ Primer》笔记 第8章 IO库
iostream定义了用于读写流的基本类型,fstream定义了读写命名文件的类型,sstream定义了读写内存string对象的类型. 标准库使我们能忽略这些不同类型的流之间的差异,这是通过继承机制 ...
- Gym100923H Por Costel and the Match
题目链接:http://codeforces.com/gym/100923/problem/H 分析:并查集,用enemy储存x的敌人,用weight储存权重决定根节点 需用scanf和puts输入输 ...
- JVM 中的StringTable
是什么 字符串常量池是 JVM 中的一个重要结构,用于存储JVM运行时产生的字符串.在JDK7之前在方法区中,存储的是字符串常量.而字符串常量池在 JDK7 开始移入堆中,随之而来的是除了存储字符串常 ...
- python基础学习之类
面向对象和面向过程 面向过程:以吃饭为例,即为 煮饭.洗菜.洗碗.切菜.炒菜.出锅.吃饭面向对象:目标对象做完,直接吃疑问点:1.面向对象就是把过程用函数封装起来,随时调用?:2.面向过程就是每次都把 ...
- mysql最权威的总结
1.数据库操作 create database person charset utf8; -- 创建数据库show DATABASES; -- 查看数据库drop database person; - ...
- Git修改用户名、邮箱和密码
$ git config --global --replace-all user.name "要修改的用户名" $ git config --global --replace-al ...