java中的接口与继承,接口的例子讲解
extends 继承类;implements 实现接口。
简单说:
1.extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,
2.JAVA中不支持多重继承,但是可以用接口来实现,这样就要用到implements,
3.继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了 ,
比如 class A extends B implementsC,D,E
extends和implements有什么不同?
对于class而言,extends用于(单)继承一个类(class),而implements用于实现一个接口(interface)。
interface的引入是为了部分地提供多继承的功能。在interface中只需声明方法头,而将方法体留给实现的class来做。这些实现的class的实例完全可以当作interface的实例来对待。在interface之间也可以声明为extends(多继承)的关系。
注意:一个interface可以extends多个其他interface。
接口实例:
例子1:
一共包括4个类,分别是CAR.java,BigCar.java,TestCar.java,CarInterface.java。
CAR.java:
声明一个接口,不实现方法,只声明方法,接口不能实例化。
package com.su.callback;
publicinterface CAR {
void start();
void stop();
}
BigCar.java:
用BigCar类实现接口CAR,实现它的方法,也就是写程序结构体。BigCar是能够实例化的,BigCar的对象是Car型的。当你需要调用接口
CAR的方法的时候,需要用CAR的对象来调用CAR的方法,但是CAR又不能实例化,我们就可以用实现了CAR的BigCar的对象来调用CAR的方法。
package com.su.callback;
publicclass BigCar implements CAR {
@Override
publicvoid start() {
// TODO Auto-generated method stub
System.out.println("bigcar start...");
}
@Override
publicvoid stop() {
// TODO Auto-generated method stub
System.out.println("bigcar stop!");
}
}
TestCar.java:
用opeCar方法调用Car的方法。
package com.su.callback;
publicclass TestCar {
publicvoid operCar(CAR c)
{
c.start();
c.stop();
}
}
TestInterface.java:
调用operCar方法,需要传实参进去,实参需要是一个对象,对象是BigCar(实现了接口的类)的实例化对象。
package com.su.callback;
publicclass TestInterface {
publicstaticvoid main(String[] args)
{
TestCar tc=new TestCar();
BigCar bc =new BigCar();
tc.operCar(bc);
}
}
输出结果:
bigcar start...
bigcar stop!
总结:当我们调用接口A的方法:Amethod()的时候,通过调用以接口为参数的函数:b(A a) 来调用接口的函数Amethod(),要想调用b,需要传实参进去。
例子2:
//接口类:JK.java
package com.su.callback;
publicinterface JK {
// 接口中可以有几个方法的声明
publicvoid MethodA();
publicvoid MethodB();
}
//接口的实现类 ImplementJK.java
package com.su.callback;
publicclass ImplementJK implements JK {
@Override
publicvoid MethodA() {
// TODO Auto-generated method stub
System.out.println("接口JK的MethodA实现。。");
}
@Override
publicvoid MethodB() {
// TODO Auto-generated method stub
System.out.println("接口JK的MethodB实现。。");
}
}
//调用接口的方法的类DJK.java
package com.su.callback;
publicclass DJK {
publicstaticvoid main(String args[]){
ImplementJK implementJk=new ImplementJK();
implementJk.MethodA();
implementJk.MethodB();
}
}
只调用MehtodA的时候,就只执行MethodA ,
总结:接口的对象可以调用接口的方法,接口的实现类的对象也可以调用接口的方法。
例子1:定义一个类TestCar,用这个类的方法(以接口为参数)调用接口的两个方法,再用另外一个类TestInterface调用TestCar的一个方法达到调用接口的两个方法的作用。
例子2:直接用接口的实现类的实例,调用接口的方法。
java中的接口与继承,接口的例子讲解的更多相关文章
- 在java中,List是个接口,那实现List接口的类有哪些,有什么区别?
在java中,List是个接口,那实现List接口的类有哪些,有什么区别? 解答: ArrayList是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引 ...
- 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结
为什么说JAVA中要慎重使用继承 这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...
- 转:Java中子类是否可以继承父类的static变量和方法而呈现多态特性
原文地址:Java中子类是否可以继承父类的static变量和方法而呈现多态特性 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明 ...
- java中接口可以继承接口
今天阅读别人的代码才发现,接口是可以继承接口的 一个类只能extends一个父类,但可以implements多个接口. 一个接口则可以同时extends多个接口,却不能implements任何接口. ...
- Java中多态、抽象类和接口
1:final关键字(掌握) (1)是最终的意思,可以修饰类,方法,变量. (2)特点: A:它修饰的类,不能被继承. B:它修饰的方法,不能被重写. C:它修饰的变量,是一个常量. (3)面试相关: ...
- java 面对对象(抽象 继承 接口 多态)
什么是继承? 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可. 多个类可以称为子类,单独这个类称为父类.超类或者基类. 子类可以直接 ...
- Java开发知识之Java中的集合上List接口以及子类讲解.
Java开发知识之Java中的集合类 一丶什么是集合类 如果你学习说数据结构,那么学习集合就很简单. 因为集合就是存储数据的结构. 例如 有链表结构 (list ) 还有 map结构.等等. 集合类就 ...
- Java自学-接口与继承 接口
设计Java的接口 在设计LOL的时候,进攻类英雄有两种,一种是进行物理系攻击,一种是进行魔法系攻击 这时候,就可以使用接口来实现这个效果. 接口就像是一种约定,我们约定某些英雄是物理系英雄,那么他们 ...
- Java中的实体类--Serializable接口、transient 关键字
在java中,实体类是一个非常重要的概念,我们可以在实体类中封装对象.设置其属性和方法等.关于实体类,也经常涉及到适配器模式.装饰者模式等设计模式.那么在实际代码开发中,关于实体类的注意事项有哪些呢? ...
- Java中的封装、继承、多态
封装 在如何理解面向对象这篇文章中,提到所谓的封装就是"功能都给你做好了,你不必去理解它是怎么写出来的,直接使用即可.".但你得清楚一点,那就是这句话是相对于使用者来说的,而作为开 ...
随机推荐
- tensorflow,model,object_detection,训练loss先下降后递增,到几百万,解决tensorflow,model,object,detection,loss,incease
现象:训练loss一开始下降一部分,跌代到若干次(具体多少和你的learning rate大小有关,大就迭代小就发生,小就需要多几次迭代) 日志如下(下面的日志来源于网络,我自己的日志已经clear掉 ...
- mysqli链接数据库
<?php $uid = $_GET['uid']; $host = 'localhost';$database = 'test';$username = 'root';$password = ...
- Jenkins解析日志(log-parser-plugin)
Jenkins打包机打包时产生了大量的日志,当报错时,不方便查看error日志 因为日志量太大,查看全部log的时候整个web页面会卡死,所以引用log-parser-plugin可以增加过滤条件显示 ...
- ToastUtils 工具类
package com.example.grenaderose.redthunder.utils; import android.content.Context; import android.os. ...
- JMETER java.net.SocketTimeoutException: Read timed out
将JMETER脚本里的请求超时时间由1000ms 修改为 10000ms,该错误不再出现.
- 笔记之monkey参数(一)
monkey 参数 参数分类 常规类参数 事件类参数 约束类参数 调试类参数 常规类参数 常规类参数包括帮助参数和日志信息参数.帮助参数用于输出Monkey命令使用指导:日志信息参数将日志分为三个级别 ...
- 随机获得id的方法
public String generateUUID() { String uuid = UUID.randomUUID().toString(); uuid = uuid.replace(" ...
- 在Spring Boot中使用WebClient消费RESTful接口
转载 https://www.zifangsky.cn/1343.html 参考 https://segmentfault.com/a/1190000012916413
- mysql group by using filesort优化
原join 连接语句 SELECT SUM(video_flowers.number) AS num, video_flowers.flower_id, flowers.title, flowers. ...
- docker log driver
驱动程序 描述 none 容器没有日志可用,docker logs 什么都不返回 json-file 日志格式化为 JSON.这是 Docker 默认的日志驱动程序. syslog 将日志消息写入 s ...