java接口定义和作用
接口语法
1.接口是一种引用类型,可以等同看作类。修饰符 interface 接口名
2.接口中只能出现常量和抽象方法
3.接口其实是一个特殊的抽象类,特殊在接口是完全抽象的
4.接口中没有构造方法,接口也无法实例化
5.接口和接口之间可以多继承
6.一个类可以实现多个接口,这里的实现等同于继承
7.一个非抽象的类实现接口,需要将接口中所有方法实现/重写/覆盖
#java
package study1;
public interface A{
//常量都是public static final,可省略
public static final String sucess = "SUCCESS";
public static final double pi = 3.14;
byte max_value = 127;
//接口中所有的抽象方法都是public abstract,
public abstract void m1();
//接口方法不能有方法体,如 void m22(){};会提示interface abstract methods cannot have body
void m2();
interface B{
void m1();
}
interface C{
void m2();
}
interface D{
void m3();
}
interface E extends B,C,D{
void m4();
}
/*
extends只能单继承,implements可以多继承
如果实现的接口有多个方法,必须覆盖接口中的方法。
*/
class MyClass implements B,C{
public void m2(){}
public void m1(){}
}
class MyClass2 implements E{
public void m1(){};
public void m2(){};
public void m3(){};
public void m4(){};
}
}
接口的作用
#java
package date818;
/**
* 接口的作用:
* 1。可以使项目分离,所有层都面向接口开发,提高开发效率
* 2。接口是代码和代码之间的耦合度降低。变得可插拔,可以随意切换。
* 3。接口和抽象类都能完成某个功能,优先选择接口,因为接口可以多实现,多继承。并且一个类除了接口之外,还可以继承其他类
*/
public interface CustomerService {
//定义一个推出系统的方法
void logout();
}
package date818;
//接口实现类1
public class CustomerServierImpl implements CustomerService {
public void logout(){
System.out.println("成功退出系统");
}
}
package date818;
//接口实现类2
public class CustomerServiceImpl2 implements CustomerService{
public void logout(){
System.out.println("hello world");
}
}
package date818;
public class TestCustomer {
public static void main(String[] args){
//需要执行CustomerServiceImpl和CustomerImpl2接口实现类中的logout方法
//以下程序面向接口调用
CustomerService cs = new CustomerServierImpl();//多态。父类型引用指向子类型对象
//调用
cs.logout();
CustomerService cs2 = new CustomerServiceImpl2();
cs2.logout();
}
}
#java
//定义接口
package date818;
public interface Engine {
//所有发动机都可以通过这个接口启动
void start();
}
//定义实现接口的类
package date818;
public class Honda implements Engine{
public void start(){
System.out.println("本田启动");
}
}
package date818;
public class Ymaha implements Engine{
public void start(){
System.out.println("雅马哈启动");
}
}
//定义生产汽车的类
package date818;
public class Car {
//面向接口编程,不能将类实例化
/**
* 引用接口定义一个属性e,相当于
* String name;
* Integer age;
* 类里定义的变量是成员变量;方法里定义的变量是局部变量。
*/
Engine e ;//成员变量e
Car(Engine e){
//定义构造方法,把局部变量e赋值给成员变量
this.e=e;
}
//对外提供的测试方法
public void testEngine(){
//成员变量e
e.start();
}
}
//定义测试类
package date818;
public class TestCar {
public static void main(String[] args){
//生产引擎
Engine e = new Ymaha();
//根据构造方法传入参数生产汽车
Car c = new Car(e);
//测试引擎
c.testEngine();
c.e = new Honda();//已经定义了一个实例,直接对实例的参数修改即可
c.testEngine();
}
}
雅马哈启动
本田启动
java接口定义和作用的更多相关文章
- Java接口定义和实现
1. 使用interface来定义一个接口.接口定义类似类的定义,分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成.定义接口的基本格式如下: [修饰符] interface 接口名 [ ...
- java接口定义的静态方法和默认如何在类实现的时候使用
在 JDK1.8,允许我们给接口添加两种非抽象的方法实现: 1.默认方法,添加 default 修饰即可: 2.静态方法,使用 static 修饰:示例如下: 这样可以实现接口的增强,那我们在类实现接 ...
- java 接口的作用和好处
1.java 接口的作用 http://blog.csdn.net/hack_bug/article/details/7634737 2.一位Java大牛的回答 很多JAVA初级程序员对于接口存在的意 ...
- java接口和抽象类的区别和作用(功能、用途、好处)
Java接口: 总结了4点关于JAVA中接口存在的意义: 1.重要性:在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋 ...
- Java 中的接口有什么作用?以及接口和其实现类的关系?
Java 中的接口有什么作用? - Ivony的回答 - 知乎 https://www.zhihu.com/question/20111251/answer/16585393 这是一个初学者非常常见的 ...
- 菜鸡的Java笔记 第二十四 - java 接口的基本定义
1.接口的基本定义以及使用形式 2.与接口有关的设计模式的初步认识 3.接口与抽象类的区别 接口与抽象类相比,接口的使用几率是最高的,所有的 ...
- Java 8新特性-2 接口定义增强
为了解决当原有的接口中方法不足时,向原有的接口中添加新的方法,该接口下的N多实现类也需要重写该方法的问题!Java8引入了接口定义增强概念! Java8 打破了原有的接口的方法定义: 公共的.抽象的 ...
- 关于java中接口定义常量和类定义常量的区别
/** * * @author YZJ * @Description java中定义常量的最佳方法 */ public final class Contants{ /** * @Description ...
- 教你在Java接口中定义方法
基本上所有的Java教程都会告诉我们Java接口的方法都是public.abstract类型的,没有方法体的. 但是在JDK8里面,你是可以突破这个界限的哦. 假设我们现在有一个接口:TimeClie ...
随机推荐
- <NET CLR via c# 第4版>笔记 第17章 委托
17.1 初识委托 .net 通过委托来提供回调函数机制. 委托确保回调方法是类型安全的. 委托允许顺序调用多个方法. 17.2 用委托回调静态方法 将方法绑定到委托时,C# 和 CLR 都允许引用类 ...
- 不挣扎了,MVC验证错误信息汇总是酱紫的
public static string GetModelErros(this ModelStateDictionary dic) { var sb = new StringBuilder(); va ...
- JSONField解决序列化与反序列化字段匹配问题
需求:调用第三方数据,数据格式为Json,并提供一个接口将获取的第三方数据给本公司其他部门调用. 处理流程:第三方Json--反序列化实体--保存到本地数据库--查询数据--序列化Json数据供本公司 ...
- Myecilpse web +tomcat 项目: JSP在mysql中创建表
<%@ page language="java" import="java.util.*" import="com.mysql.jdbc.Dri ...
- jsp:incloud用法
为什么要用jsp:incloud 因为单独一个页面太大,需要嵌套子页面,当请求有父页面的时候,子页面会自动加载<jsp:include page="/agentProfitShareN ...
- CUDA Samples: 获取设备属性信息
通过调用CUDA的cudaGetDeviceProperties函数可以获得指定设备的相关信息,此函数会根据GPU显卡和CUDA版本的不同得到的结果也有所差异,下面code列出了经常用到的设备信息: ...
- spark 与 Hadoop 融合后 Neither spark.yarn.jars nor spark.yarn.archive is set
参考文献: http://blog.csdn.net/lxhandlbb/article/details/54410644 每次提交Spark任务到yarn的时候,总会出现uploading reso ...
- Codeforces1106F 【BSGS】【矩阵快速幂】【exgcd】
首先矩阵快速幂可以算出来第k项的指数,然后可以利用原根的性质,用bsgs和exgcd把答案解出来 #include<bits/stdc++.h> using namespace std; ...
- BZOJ4897: [Thu Summer Camp2016]成绩单【DP of DP】
Description 期末考试结束了,班主任L老师要将成绩单分发到每位同学手中.L老师共有n份成绩单,按照编号从1到n的顺序叠 放在桌子上,其中编号为i的成绩单分数为w_i.成绩单是按照批次发放的. ...
- 《DSP using MATLAB》Problem 3.18
代码: %% ------------------------------------------------------------------------ %% Output Info about ...