java之接口
时间:2022-07-23
本文章向大家介绍java之接口,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
有时必须从几个类中派生出一个子类,继承它们所有的属性和方法,但是,Java不支持多继承,就有了接口,就可以得到多重继承的效果。
接口是抽象方法和常量值的定义的结合;
从本质上讲,接口是一种特殊的抽象类,这种抽象类中只含有常量和方法的定义,而没有变量和方法的实现;
实现接口类:class SubClass implements interfaceA{}
一个类可以实现多个接口,接口亦可以继承其它接口;
接口的特点:
- 用Interface来定义;
- 接口中的所有成员变量都默认是由public static final 修饰的;
- 接口中的所有方法都是默认由public abstract修饰的;
- 接口没有构造器;
- 接口采用多层继承机制;
接口定义举例:
public interface Runner{
int ID = 1;
void start();
public void run();
void stop();
}
实现接口的类中必须提供接口中的所有方法的具体实现,方可实例化,否则需要声明为抽象类;
接口的主要作用是被实现类实现;
与继承关系类似:接口和实现类中间存在多态性;
当存在继承和实现关系时,先继承后实现;
抽象类在新增抽象方法时存在问题:父类新增抽象方法,子类必须实现该抽象方法,否则子类必须声明为抽象类;
解决方法:新建一个接口,接口中为该抽象方法,让子类去实现;
举个例子:会唱歌的厨师是个好老师。
如果用抽象类来实现:老师--继承--厨师--继承--歌者--继承--人,但是老师、厨师、歌者之间并没有相应的关系;
如果用接口实现:老师--继承--人,然后老师实现厨师接口,老师实现歌者接口;
Person.java
package inf;
public abstract class Person {
String name;
int age;
int sex;
abstract void showInfo();
}
Cooking.java
package inf;
public interface Cooking {
void fry();
}
Singing.java
package inf;
public interface Singing {
void singing();
}
SCTeacher.java
package inf;
public class SCTeacher extends Person implements Cooking,Singing{
String course;
public void setInfo() {
super.name = "tom";
super.age = 12;
super.sex = 1;
this.course = "数学";
}
public void showInfo() {
System.out.println("姓名:"+super.name
+"n"+"年龄:"+super.age+"n"
+"性别:"+super.sex);
System.out.println("教的课程是:"+this.course);
}
public void fry() {
System.out.println("老师的炒菜很好");
}
public void singing() {
System.out.println("老师的唱歌很好");
}
}
Main.java
package inf;
public class Main {
public static void main(String[] args) {
SCTeacher sc = new SCTeacher();
sc.setInfo();
sc.showInfo();
sc.fry();
sc.singing();
// Cooking c = new SCTeacher();
// c.fry();
}
}
输出:
姓名:tom 年龄:12 性别:1 教的课程是:数学 老师的炒菜很好 老师的唱歌很好
- 两个死锁的实例 (r5笔记第90天)
- SSM【史上最详细整合】
- 终结 finalize()和垃圾回收(garbage collection)
- 代码+实战:TensorFlow Estimator of Deep CTR —— DeepFM/NFM/AFM/FNN/PNN
- 【SSH测试整合Demo】企业人事管理系统
- Hybris 项目工程配置
- 购物车案例【简单版】
- 再学习之MyBatis.
- 用户登陆注册【JDBC版】
- 学习思考之《编程之美》.
- 干货 | 深度剖析服务发现组件Netflix Eureka
- 多线程编程学习一(Java多线程的基础).
- TensorFlow | 自己动手写深度学习模型之全连接神经网络
- 多线程编程学习二(对象及变量的并发访问).
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 实验3.1 直线光栅化(键盘交互版)
- 150行Python代码实现带界面的数独游戏
- 实验4 编码裁剪算法
- 浅谈Python中os模块及shutil模块的常规操作
- Python decorator拦截器代码实例解析
- 实验4.1 编码裁剪算法(鼠标交互版)
- python实现对变位词的判断方法
- python实现一个猜拳游戏
- 实验5 OpenGL二维几何变换
- Python关键字及可变参数*args,**kw原理解析
- 实验6 OpenGL模型视图变换
- python学生管理系统的实现
- 详解Android使用Handler造成内存泄露的分析及解决方法
- android使用flutter的ListView实现滚动列表的示例代码
- 实验7 3D机器人