首页 > 其他分享 >彻底搞懂接口和抽象类

彻底搞懂接口和抽象类

时间:2024-11-06 20:46:09浏览次数:3  
标签:方丈 子类 void 接口 public 搞懂 抽象类

接口

接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

public interface Shape {
    void draw();  // 画图的方法,没有具体实现
}

可以看出里面只有孤孤单单的方法声明而已,并没有具体实现。那方法由谁来实现,没错正是实现所有接口方法的实现类,于是又有一个问题,为什么是所有方法?因为接口里面的方法默认是抽象方法尽管他们并没有abstract修饰,而抽象方法是必须实现的。

抽象类

学习的过程中我们还会接触到一个东西叫做抽象类,这玩意有什么用?为什么要和接口一起讲?

抽象类实际上就是一个被abstract修饰的类,与正常类最大的差别就是他不能被实例化,所以想要调用其中的方法只能通过实例化所继承的子类来调用,而要是在抽象类中定义抽象方法那所继承的子类就必须要将其实现!再仔细联想到接口的定义这两个是不是就有一点相似之处了?所以特地写这篇来加深一下自己的理解。

public abstract class Employee
{
   private String name;
   private String address;
   private int number;
   
   public abstract double computePay();
   
   //其余代码
}

接口和抽象类的联系

相同点

  • 都不能直接实例化,一个靠实现类一个靠子类继承
  • 其中的抽象方法都必须实现

不同点

  • 接口中只能定义常量,也就是必须由static final定义
  • 抽象类中是可以提供部分方法实现的
  • 非常重要的一点!!一个类可以实现多个接口,但是只能继承于一个抽象类,这是由java特性决定的因为Java不支持多重继承(一个类只能有一个父类)
public interface Movable {
    void move();
}

public interface Eatable {
    void eat();
}

public class Dog implements Movable, Eatable {
    public void move() {
        System.out.println("Dog moves");
    }
    
    public void eat() {
        System.out.println("Dog eats");
    }
}

那他们有什么用呢?????这是最关键的问题

两个字,规范。

接口:少林寺武功标准

  • 接口的本质: 接口定义了类应该具备的行为或能力,但是不关心这些行为如何具体实现。
  • 比喻: 少林寺接口就像是**“少林寺的武功标准”,任何想要学习少林功夫的人(类)都必须遵守这个标准。标准规定了你必须会一些基本的功夫(方法),但它并不管你如何练习这些功夫,具体的实现由你自己来完成。换句话说,接口规定了你能做什么**(例如“练功”),但是不规定你如何做。
// 少林寺接口规定了必须练习的功夫
public interface ShaolinTemple {
    void kungFu();  // 所有实现该接口的类必须会“练功”
}

// 大师兄实现了少林寺接口,说明他能练少林功夫
public class MasterBrother implements ShaolinTemple {
    @Override
    public void kungFu() {
        System.out.println("大师兄展示少林功夫!");
    }
}

抽象类:方丈

  • 抽象类的本质: 抽象类不仅可以包含已实现的方法,还可以包含抽象方法。它允许子类继承通用功能,并且扩展独特的功能。
  • 比喻: 方丈可以看作是“少林寺的方丈”。方丈除了会基础的少林功夫外,还掌握了一些秘密武功**。每个方丈(子类)都能继承基础的少林功夫(已实现的功能),但每个方丈也有自己的特殊技能(抽象方法)。子类可以继承这些基础功夫,并重写或扩展这些功夫,继承了基础功夫的同时,也可以展示独特的能力。
// 定义抽象类:方丈,方丈具备基础功夫和特殊的秘密功夫
public abstract class Abbot {
    // 基础少林功夫,所有方丈类都具备
    public void basicKungFu() {
        System.out.println("方丈展示基础少林功夫!");
    }
    
    // 每个方丈都有的秘密武功,由子类决定具体实现
    public abstract void secretKungFu();
}

// 具体的方丈,继承自Abbot,拥有基础功夫和秘密武功
public class AbbotXuan extends Abbot {
    @Override
    public void secretKungFu() {
        System.out.println("方丈玄展示玄功!");
    }
}

public class AbbotYu extends Abbot {
    @Override
    public void secretKungFu() {
        System.out.println("方丈玉展示玉功!");
    }
}

写了半个多小时,算是理清楚了

标签:方丈,子类,void,接口,public,搞懂,抽象类
From: https://blog.csdn.net/wdghcfrg/article/details/143578833

相关文章

  • 别再被多线程搞晕了!一篇文章轻松搞懂 Linux 多线程同步!
    前言大家有没有遇到过,代码跑着跑着,线程突然抢资源抢疯了?其实,这都是“多线程同步”在作怪。多线程同步是个老生常谈的话题,可每次真正要处理时还是让人头疼。这篇文章,带你从头到尾掌握Linux的多线程同步,把概念讲成大白话,让你看了不再迷糊,还能拿出来装一装逼!不管是“锁”、“信号......
  • 【Java SE语法】抽象类(abstract class)和接口(interface)有什么异同?
    目录1.抽象类与接口的基本概念1.1 抽象类1.2接口2.抽象类与接口的异同2.1相同点2.2不同点3.拓展知识:多态与设计模式3.1多态3.2设计模式4.结论        在软件工程中,设计模式和代码结构的选择对于构建可维护、可扩展的系统至关重要。抽象类(Abstrac......
  • C++:多态中的虚/纯虚函数,抽象类以及虚函数表
    我们在平时,旅游或者是坐高铁或火车的时候。对学生票,军人票,普通票这些概念多少都有些许耳闻。而我们上篇文章也介绍过了继承与多继承。如果这些票我们都分别的去写一个类,当然很冗余,这里我们便可以去使用继承,我们假设我们的票价是由一个票价函数控制的,如果子类与父类中有着同名的......
  • Scala的抽象类
    抽象类:是一个不能被实例化的类。      !不可以直接创建对象,而是通过子类创建对象。 关键字:abstract   语法:abstractclassA{}举例://定义抽象类:定义标准//抽象类是一个特殊的类,它至少包含一个抽象方法//抽象方法:没有方法体,只有def和方法名abstra......
  • 一文搞懂:AI网关这个新东西是什么意思?有没有开源免费的选择?
    AI网关是什么意思?有什么用?AI网关是企业应用与内外部大模型之间的桥梁,它位于企业应用与内外部大模型的调用交汇点。AI网关的主要功能是将应用请求通过集中管理模块转发给1内部自建模型、2外部大模型服务提供商,甚至3海外模型提供商。通过这种方式,AI网关在企业内管......
  • go 定义接口解决 import cycle not allowed
    前言go项目运行报错:importcyclenotallowed原因是在Go语言中,导入循环(importcycle)是指两个或更多的包之间形成了相互依赖的关系,即A包导入了B包,而B包又反过来导入了A包,形成一个循环。这种循环会导致编译器无法确定每个包的完整依赖图,因为它们互相引用,就像一个无解的链条。避......
  • 接口文档[Knife4j]
    接口文档[Knife4j]接口文档是描述API接口的详细文档,通常用于沟通开发、测试和使用API的团队。一个好的接口文档不仅能够让开发人员明确接口的使用方法,还可以帮助使用者理解API的功能和预期行为。Knife4j使用,参考:https://doc.xiaominfo.com/docs/quick-startswagger标准......
  • CompletableFuture异步编排接口优化方案
    接口优化方案(1)程序本身,减少不必要的条件判断、循环(2)减少数据库的交互次数,以及每个sql查询的数据量(列数和行数越少越好)(3)提高sql的性能,通过建立合适的索引(4)使用java8的stream流提高集合的遍历操作的效率(5)引入缓存,从redis中加载数据的效率高于mysql(6)使用多线程异步......
  • \\:ip 访问网络上的SMB共享目录、IP接口传输数据、ftp://ip ftp传输
    一、访问网络上的SMB共享目录1.导入JAR包 <!--访问网络上的SMB共享目录--> <dependency> <groupId>com.hierynomus</groupId> <artifactId>smbj</artifactId> <version>0.13.0</version> </dependency>2.使用//定义......
  • 举例说明什么情况下会更倾向于使用抽象类而不是接口
    接口和抽象类都遵循”面向接口而不是实现编码”设计原则,它可以增加代码的灵活性,可以适应不断变化的需求。接口vs抽象类 继承限制:Java中,一个类只能继承一个类,但可以实现多个接口。继承一个类意味着失去了继承其他类的机会。行为表示:接口通常用于表示附加的行为......