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 教的课程是:数学 老师的炒菜很好 老师的唱歌很好
- 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 文档注释
- 96. 不同的二叉搜索树 II Krains 2020-09-03 树
- 410. 分割数组的最大值 Krains 2020-08-29 20:21:39 动态规划二分查找
- 字典树 Krains 2020-09-01
- redis学习(十)
- vue修改浏览器的标题title
- 天天基金网数据接口
- Centos7实现开机自启EasySwoole
- input内文字与光标的初始位置调整
- 小程序push、unshift、concat
- mac下导出chrome插件及安装
- Job 资源对象
- ReplicaSet && DaemonSet 资源对象
- 批量执行crontab指定条目的注释和解注释
- Rancher集群部署后需要做的几件事
- Ingress(Nginx)日志持久化与可视化(多图预警)