首页 > 其他分享 >【面向对象】06一文搞懂抽象和接口 类与类之间的关系 抽象类与接口的相同点与不同点(多代码)

【面向对象】06一文搞懂抽象和接口 类与类之间的关系 抽象类与接口的相同点与不同点(多代码)

时间:2024-08-23 17:22:05浏览次数:13  
标签:06 void 接口 public 抽象 搞懂 方法 抽象类

文章目录

一、抽象

1.抽象类与抽象方法

// 抽象类
public abstract class Pet {
    // 抽象方法
	public abstract void toHospital() ;
}

2.抽象方法的特点

  • 修饰符:抽象方法必须 abstract 修饰,只有方法签名,不能有方法体
  • 抽象类中的方法:抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
  • 类和成员:类该有的成员抽象类都可以有,但是不可以抽象构造方法和静态方法
  • 子类的要求:子类继承抽象类,必须重写完抽象类的全部抽象方法,否则子类也必须定义成抽象类。
  • 构造方法:抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用
// 抽象类
abstract class Shape {
    // 抽象方法,没有方法体
    abstract void draw();
    // 具体方法
    void describe() {
        System.out.println("This is a shape.");
    }
    // 非抽象构造方法
    Shape() {
        System.out.println("A shape is created.");
    }
}

// 子类实现
class Circle extends Shape {
    // 实现抽象方法
    @Override
    void draw() {
        System.out.println("Drawing a circle.");
    }
    // 可以有自己的方法
    void resize() {
        System.out.println("Resizing the circle.");
    }
}

// 使用
public class Main {
    public static void main(String[] args) {
        // 创建 Circle 对象
        Circle circle = new Circle();
        // 调用具体方法
        circle.describe();
        // 调用实现的抽象方法
        circle.draw();
        // 调用子类特有的方法
        circle.resize();
    }
}
/* 控制台输出:
A shape is created.
This is a shape.
Drawing a circle.
Resizing the circle.
*/

抽象类 VS 普通类

抽象类(Abstract Class):

  • 不能实例化(即不能创建对象)。
  • 可以包含抽象方法(未实现的方法)和具体方法(已实现的方法)。
  • 主要用于作为其他类的基类,定义通用的接口或实现共享功能。
abstract class Animal {
    abstract void makeSound();  // 抽象方法
    void sleep() {
        System.out.println("This animal sleeps.");
    }
}

普通类(Concrete Class):

  • 可以实例化(即可以创建对象)。
  • 必须实现所有从抽象类继承的抽象方法。
  • 可以包含具体的方法。
class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("Woof!");
    }
}

抽象方法 VS 普通方法

抽象方法(Abstract Method):

  • 只有方法签名,没有方法体
  • 由抽象类声明,并由子类实现。
  • 目的是为子类提供统一的接口或行为规范。
abstract class Animal {
    abstract void makeSound();  // 抽象方法
}

普通方法(Concrete Method):

  • 有完整的方法体(实现)。
  • 可以在普通类或抽象类中定义。
  • 子类可以继承并重写(覆盖)普通方法。
class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("Woof!");
    }

    void fetch() {
        System.out.println("Dog is fetching.");
    }
}

二、接口

1.interface

接口是一种能力(体现在接口的方法上 ),接口是一种约束(有些接口只有名称)。

public interface 接口名 {
	// 成员变量(常量    public static final 必须显式初始化)
	// 成员方法(抽象方法 public abstract)
} 

2.接口特征

  • 接口没有构造方法,不可以被实例化;

  • 接口是用来被类实现(implements)的,实现接口的类称为实现类;

  • 实现类可以实现多个接口,接口之间用 , 隔开;

    修饰符 class 实现类 implements 接口1, 接口2, 接口3 , ... {} 
    
  • 实现类(非抽象类)必须实现接口的所有方法。

一个接口不能实现另一个接口,但可以继承多个其他接口。子接口不需要实现父接口的抽象方法,但实现子接口的类必须实现父接口中的所有抽象方法,以及子接口中新增的抽象方法。

// 定义一个基础接口
interface BaseInterface {
    void baseMethod();
}
// 定义一个子接口继承 BaseInterface
interface SubInterface extends BaseInterface {
    void subMethod();
}
// 实现子接口的类
class ConcreteClass implements SubInterface {
    @Override
    public void baseMethod() {
        System.out.println("Implementing baseMethod");
    }
    @Override
    public void subMethod() {
        System.out.println("Implementing subMethod");
    }
}

三、类与类之间的关系

继承是 is a 的关系

public class Animal{
	public void method1(){};
}
public class Dog extends Animal{
}

实现是 is-like-a 的关系

public interface I{
	public void method1();
}
public class A implements I{
	public void method1(){}
}

关联是 has-a 的关系

public class A{
	private B b;
}
public class B{
}

四、抽象类 VS 接口

相同点

1、代表系统的抽象层

2、都不能被实例化

3、都能包含抽象方法(用于描述系统提供的服务,不必提供具体实现)

不同点

1、在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法(抽象类便于复用,接口便于代码维护

2、一个类只能继承一个直接的父类,但可以实现多个接口

标签:06,void,接口,public,抽象,搞懂,方法,抽象类
From: https://blog.csdn.net/m0_66584716/article/details/141470916

相关文章

  • Day06_0.1基础学习MATLAB学习小技巧总结(6)——矩阵运算篇
    利用暑假的时间把碎片化的MATLAB知识重新系统的学习一遍,为了在这个过程中加深印象,也为了能够有所足迹,我会把自己的学习总结发在专栏中,以便学习交流。素材来源“数学建模清风”特此说明:本博客的内容只在于总结在使用matlab中的一些小技巧,并非教程,若想系统的学习MATLAB,也可以移......
  • 体育数据API纳米奥运会数据API:高阶数据包接口文档API示例⑧
    纳米体育数据的数据接口通过JSON拉流方式获取200多个国家的体育赛事实时数据或历史数据的编程接口,无请求次数限制,可按需购买,接口稳定高效;覆盖项目包括足球、篮球、网球、电子竞技、奥运等专题、数据内容。纳米数据API2.0版本包含http协议以及websocket协议,主要通过http获取数......
  • 想知道API接口的真相吗?探究免费API接口的工作原理
    API的全称是“ApplicationProgrammingInterface”,意为“应用程序编程接口”API接口是软件系统中不同组件之间进行交互的一种方式。它定义了不同软件组件之间的通信规范和数据格式,使得这些组件能够相互调用和交换数据。定义与规范:标准化:API接口通过定义一套标准化的规范,确......
  • JSP基于SSM框架的服装租赁系统606b8程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统功能:用户,采购员,清洁员,服装类型,服装信息,服装租赁,采购入库,服装报废,服装归还,清洁分配,清洁服装,通知公告技术要求:开发语言:JSP前端使用:HTML5,CSS,JS......
  • python 06-标准库:random、string、webbrowser、email模块
    random、string模块importrandomimportstringprint(random.random())#任意-个float数字print(random.randint(1,10))#1-10之间包括1和18中任意一个整数print(random.choice([1,2,3]))#1,2,3这几个数字里面任意一个print(random.choices([1,2,3],k=2))......
  • 【面试】一文搞懂MySQL的分库分表!
            MySQL分库分表是一种数据库优化手段,通常用于应对数据量巨大、并发量高的场景。随着系统数据的增长,单个数据库可能难以承受高负载,进而影响性能和可扩展性。分库分表的目标是将数据分散到多个库或表中,从而减少单一库或表的压力,提高系统性能。目录一我们为什......
  • 【HW系列+技战法】全面掌控API接口,提升防御效果!
    原创紫队安全研究在现代互联网应用中,API接口已经成为了各种应用程序之间互通的桥梁。然而,随着API的广泛使用,API接口的安全性正逐渐成为网络安全的焦点。如果API接口被攻击者成功入侵,后果可能是灾难性的:数据泄露、服务中断、甚至整个系统瘫痪。为此,如何有效防御API接口的潜在......
  • jmeter中的关联接口
    准备接口和接口数据:省份接口:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportProvince请求方法get:城市接口:请求方式:posthttp://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportCitybyProvinceName:浙江我们可以使用请求默认值,将ht......
  • RK3588开发笔记-pdm接口ES7201音频采集调试记录
    目录​​​​​​​前言一、ES7201技术规格二、PDM接口说明RK3588的PDM接口特性三、原理图连接四、内核配置五、音频调试总结前言        在RK3588开发过程中,音频采集是一个常见的需求,而PDM(PulseDensityModulation)接口因其简单性和低成本广泛应用......
  • 基于UltraScaleKU115的高性能PCIe3.0 x8-FMC+接口卡
    基于UltraScaleKU115的高性能PCIe3.0x8-FMC+接口卡,是一款高性能的PCIe3.0X8板卡。主控芯片采用Xilinx公司KintexUltraScale系列FPGA家族中的XCKU115-FLVA1517(兼容XCKU085-FLVA1517)。板卡含有2组共8GB(单组4GB)的DDR4内存颗粒,支持JTAG口和QSFP+光纤接口以及FMC+扩展接口。......