Interface, 接口的实现初解
百度是这么说的:
public interface I_cpu {
public void yunsuan();
public String getPinpai();
}
public interface I_display {
public void xianshi();
public String getPinpai();
}
public interface I_longx extends I_cpu, I_display {
public void cunchu();
public String yingpan = null;
public String yingpan();
}
上面定义了三个接口, 用组装电脑来简单举个例子, 在写接口的时候要注意以下几点(非常重要)
1, 接口中只需要写方法或者属性, 方法不需要写方法体, 只需要写个public void yunsuan();这玩意就行了, 方法体在后面实体类里面写
2, 接口中定义的方法, 只能使用public和abstract来修饰, 不能使用private或是protect
3, 接口中可以定义属性, 但是定义的属性会默认有这几个关键字——Public, Final, Abstract
4, 接口中定义的属性,必须初始化, 就是必须赋初始值
5, 如果一个类引用了两个或者多个接口, 必须包含所引用接口的所有属性和方法
下面是定义的三个类, 这三个类分别是继承了接口; 继承了两个接口, 继承了一个接口, 但是这个接口又继承了两个接口:
public class Intel implements I_cpu {
@Override
public void yunsuan() {
// TODO Auto-generated method stub
System.out.println("Intel正在运算...");
}
@Override
public String getPinpai() {
return "Intel";
}
}
public class AMD_Display implements I_cpu, I_display {
@Override
public void xianshi() {
System.out.println("显示图形图像");
}
@Override
public void yunsuan() {
System.out.println("带显卡的CPU正在运算...");
}
@Override
public String getPinpai() {
return "CPU&DISPLAY";
}
}
public class Longxin implements I_longx {
@Override
public void yunsuan() {
System.out.println("龙芯正在运算...");
}
@Override
public String getPinpai() {
return "龙芯";
}
@Override
public void xianshi() {
System.out.println("show picture");
}
@Override
public void cunchu() {
System.out.println("save data");
}
@Override
public String yingpan() {
return "冠捷硬盘";
}
}
这样再写一个实现类, 就可以使用这些类和接口了
public class Run {
//实现通过接口定义的方法
public static void main(String[] args) {
//组装第一台电脑
Computer c1 = new Computer();
Intel cpu = new Intel();
c1.setCpu(cpu);
//直接实例化赋值的叫匿名对象
c1.setDisplay(new Display());
c1.run();
System.out.println();
//组装第二台电脑
Computer c2 = new Computer();
c2.setCpu(new AMD());
c2.setDisplay(new Display());
c2.run();
System.out.println();
//组装第三台电脑
Computer c3 = new Computer();
c3.setAd(new AMD_Display());
c3.setLx(new Longxin());
c3.Run();
}
}

抽象类和抽象方法
在定义类的过程中难免会遇到一种情况, 一个类里面有一个方法没法实现, 但是这个方法又不能舍弃, 这时候就可以使用抽象方法(abstract)
public abstract class Longxin implements I_longx {
......
public abstract void xianshi();
......
}
注意: 在一个类里面, 如果有一个方法变成了抽象方法, 那么这个类也必须定义成抽象类(即加上关键字abstract)
这个抽象类再使用的时候就要用另一个类来继承它, 在另一个类里面定义这个抽象方法的方法体
public class Longxin2 extends Longxin {
@Override
public void xianshi() {
System.out.println("Longxin2的xianshi方法");
}
}
实现类中的代码改成这样, 重新实例化Longxin类, 就可以正常调用方法了
Computer c3 = new Computer();
Longxin lx = new Longxin2();
c3.setLx(lx);
c3.Run();
Interface, 接口的实现初解的更多相关文章
- as3.0 interface接口使用方法
[转]as3.0 interface接口使用方法 AS在2.0的时候就支持接口了 接口能够让你的程序更具扩展性和灵活性,打个例如 比方你定义了一个方法 代码: public function aMet ...
- interface接口
当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用另一种形式定义和表示,就是接口 interface. 定义接口使用的关键字不是class,是interface.接口中常见的成员: 这些成员都有 ...
- golang面向对象和interface接口
一. golang面向对象介绍 1.golang也支持面向对象编程,但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言.2.golang没有类(class),golang语言的结合体(struc ...
- Golang 入门系列(四)如何理解interface接口
前面讲了很多Go 语言的基础知识,包括go环境的安装,go语言的语法等,感兴趣的朋友,可以先看看之前的文章.https://www.cnblogs.com/zhangweizhong/category ...
- go interface接口
一:接口概要 接口是一种重要的类型,他是一组确定的方法集合. 一个接口变量可以存储任何实现了接口方法的具体值.一个重要的例子就是io.Reader和io.Writer type Reader inte ...
- java interface接口的传值方法
A 类 package interface_test; public class A { private IPresenter ip; public A(IPresenter ip) { this.i ...
- JAVA 构造器, extends[继承], implements[实现], Interface[接口], reflect[反射], clone[克隆], final, static, abstrac
记录一下: 构造器[构造函数]: 在java中如果用户编写类的时候没有提供构造函数,那么编译器会自动提供一个默认构造函数.它会把所有的实例字段设置为默认值:所有的数字变量初始化为0;所有的布尔变量设置 ...
- 011-对象——interface接口说明与使用方式实例
<?php /** interface接口说明与使用方式实例 * * 接口里面的方法全是抽象方法,没有实体的方法.这样的类我们就叫做接口.定义的时候用Interface定义.实现接口时用impl ...
- Java Interface接口
Java 中接口概念 接口可以理解为一种特殊的 类,由 全局常量 和 公共的抽象方法 所组成. 类是一种具体实现体,而接口定义了某一批类所需要遵循的规范,接口不关心这些类的内部数据, 也不关心这些类里 ...
随机推荐
- priority_queue使用方法详解
1.介绍 优先队列是一种容器,它可以使得其第一个元素始终是它包含的最大元素,具体实现原理是堆排序. 它支持以下操作: empty() size() top() push() pop() 在使用prio ...
- spring boot学习(5) SpringBoot 之Spring Data Jpa 支持(2)
第三节:自定义查询@Query 有时候复杂sql使用hql方式无法查询,这时候使用本地查询,使用原生sql的方式: 第四节:动态查询Specification 使用 什么时候用呢?比如搜索有很多条 ...
- 制作jQuery文字提示插件
(functions($){ $.fn.colorTip=function(settings){ var defaultSettings={ color:'yellow', timeout:500 } ...
- PHP-Socket服务端客户端发送接收通信实例详解
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://fighter.blog.51cto.com/1318618/1533957 So ...
- 让MySql支持Emoji表情(MySQL中4字节utf8字符保存方法)
手机端插入Emoji表情,保存到数据库时报错: Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x84' ...
- Solr优化案例分析
随着umc接入主机的数量越来越多,每天产生的syslog日志数量也在剧增, 之前一天产生的syslog数量才不 到1W,随着整个集团的网络设备不端接入,导致现在每天产生的syslog数量大概在180w ...
- 学习MongoDB 六: MongoDB查询(游标操作、游标信息)(三)
一.简介 db.collection.find()可以实现根据条件查询和指定使用投影运算符返回的字段省略此参数返回匹配文档中的所有字段.并返回到匹配文档的游标,可以随意修改查询限制.跳跃.和排序顺序的 ...
- 生存分析与R
生存分析与R 2018年05月19日 19:55:06 走在码农路上的医学狗 阅读数:4399更多 个人分类: R语言 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...
- ldap复制
1.使用yum命令安装openldap,openldap-servers,openldap-clients $ yum install openldap $ yum install openldap- ...
- 过滤器 ;spring拦截器 切片 小结
1. springMVc的拦截器 实现HandlerInterceptor接口,如下: public class HandlerInterceptor1 implements HandlerInter ...