本文已参与[新人创作礼]活动,一起开启掘金创作之路。
哈喽,大家好!我是Why,一名在读学生,目前刚刚开始进入自己的编程学习生涯。虽然学习起步较晚,但我坚信做了才有0或1的可能。学了一段时间以后也是选择在掘金上分享自己的日常笔记,也希望能够在众多道友的大家庭中打成一片。 本文主要讲解java实现单链表,如果大家读后觉得有用的话,还请大家多多支持博主:欢迎 ❤️点赞👍、收藏⭐、留言💬 ✨✨✨个人主页:JinHuan
文章目录
🌈接口的基础语法
1、接口的定义
public interface 接口名{
}
2、接口可以说是 抽象方法 以及 常量值的集合
为什么这样说?是因为接口中只含有这两类:
常量 以及 方法的定义
所以接口实际上也是'一种特殊的抽象类'
但是里面没有变量以及实现的方法
3、和普通的类一样,接口也可以拥有方法和属性
所有的属性默认使用 public static final 进行修饰
所有的方法默认使用 public abstract 进行修饰
4、为什么要使用接口?
在实际的开发过程中,有时候需要从几个类中派生出一个子类来继承它们的属性和方法,
但是java不支持多继承,为了解决这一问题,接口出现了,以此变相实现多继承的效果
而且接口可以降低程序的耦合度,提高程序的扩展性
5、怎么去实现一个接口?使用 implements 关键字
Class 类名 implements 接口1{
//实现接口1中规定的抽象方法
}
6、怎么实现多个接口?
Class 类名 implements 接口1,接口2{
//实现所有接口的所有抽象方法
}
一个类实现多个接口的时候,不建议使用多态来创建实现类的对象(下见实例)
7、接口之间支持多继承
interface X{
}
interface Y{
}
interface Z extends X,Y{
}
8、接口之间即使没有继承关系,也可以直接互转,(类之间不行)
但是运行时可能会出现:ClassCastException
所以转型之前先 if + instanceof 进行判断。
9、继承和实现都存在的话,代码应该怎么写?
extends 关键字在前。
implements 关键字在后。
10、 但凡满足is a的表示都可以设置为继承,例如:Cat is a Animal,
但凡是满足has a的表示都以属性形式存在,例如:Bird has a mouth
🥝接口开发实例
🎯单实现例子
/**
* @Author jinhuan
* @Date 2022/3/22 17:50
* Description:测试类
*/
public class Test {
public static void main(String[] args) {
//接口不可以直接new对象
//FlyAble flyAble = new FlyAble();
//多态,接口就像(父类一样)实现接口“等价于”继承
FlyAble cat = new Cat();
//调用接口中的方法
cat.fly();
}
}
class Cat implements FlyAble{
@Override
public void fly() {
System.out.println("猫咪实现了FlyAble接口,猫儿插上了翅膀开始飞翔!!!");
}
}
interface FlyAble {
void fly();
}
🏓多实现实例
/**
* @Author jinhuan
* @Date 2022/3/22 17:50
* Description:测试类
*/
public class Test {
public static void main(String[] args) {
/*
多态,接口就像(父类一样)实现接口“等价于”继承
FlyAble cat = new Cat();
调用接口中的方法
cat.fly();
注意,此时的cat对象是通过FlayAble进行创建的
虽然cat实现了DanceAble接口,但是依旧无法调用DanceAble的方法
会出现not found method的错误
cat.dance();
所以当一个类实现多个接口的时候,建议不使用多态创建对象
*/
Cat newCat = new Cat();
newCat.fly();
newCat.dance();
}
}
interface FlyAble {
void fly();
}
interface DanceAble {
void dance();
}
class Cat implements FlyAble,DanceAble{
@Override
public void fly() {
System.out.println("猫咪实现了FlyAble接口,猫儿插上了翅膀开始飞翔!!!");
}
@Override
public void dance() {
System.out.println("猫咪实现了DanceAble接口!猫咪在边走猫步边跳舞!!!");
}
}
✨ 接口的多继承以及接口间的类型转换
/**
* @Author jinhuan
* @Date 2022/3/22 17:50
* Description:测试类
*/
public class Test {
public static void main(String[] args) {
//多态创建A的实现类对象
A w = new W();
//A 和 B 两个接口之间没有继承关系
//对 A的实现类对象 进行强转为 B类型,并没有报错
B b = (B) w;
//但是在运行的时候会出现 ClassCastException
//所以转型之前先 if + instanceof 进行判断
//实例化C的实现类
C m = new M();
m.a();
m.b();
m.c();
}
}
/**
* 定义三个接口
* */
interface A{
void a();
}
interface B{
void b();
}
/**
* 一个类实现 A、B
* */
interface C extends A,B{
void c();
}
/**
* 类 W 实现接机 A
* */
class W implements A{
@Override
public void a() {
System.out.println("A被实现了!");
}
}
/**
* 类 M 实现接口 c
* 接口C 继承了 接口A和B
* */
class M implements C{
@Override
public void a() {
System.out.println("A被实现了!");
}
@Override
public void b() {
System.out.println("B被实现了!");
}
@Override
public void c() {
System.out.println("C被实现了!");
}
}
🐳接口类综合实例
package com.blog.interfaceTests;
/**
* @Author jinhuan
* @Date 2022/3/22 20:39
* Description:
*/
public class UsbTest {
public static void main(String[] args) {
//多态实例化Usb的实现类——键盘类
Usb keyBoard = new KeyBoard();
//调用键盘的use方法
keyBoard.use();
//多态实例化Usb的实现类——鼠标类
Usb mouse = new Mouse();
//调用鼠标的use方法
mouse.use();
}
}
/**
* Use接口类
* */
interface Usb {
/**
* USB接口的使用
*/
void use();
}
/**
* 鼠标类
* */
class Mouse implements Usb{
@Override
public void use() {
System.out.println("鼠标正在通过USB接口操作窗口!");
}
}
/**
* 键盘类
* */
class KeyBoard implements Usb{
@Override
public void use() {
System.out.println("键盘正在使用USB接口写东西!");
}
}
🤡写在最后
以上均为菜鸟分享日常,如有不当之处,劳请各位批评指正!本人将第一时间纠正!谢谢!另外,我自己整理了一些资源(笔记、书籍、软件等)分享在我的公众号上,非常欢迎大家来访白嫖和博主做朋友,一起学习进步!最后别忘啦支持一下博主哦,求三连!❤️❤️❤️