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

本文主要是介绍【面向对象】06一文搞懂抽象和接口 类与类之间的关系 抽象类与接口的相同点与不同点(多代码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 一、抽象
      • 1.抽象类与抽象方法
      • 2.抽象方法的特点
    • 二、接口
      • 1.interface
      • 2.接口特征
    • 三、类与类之间的关系
    • 四、抽象类 VS 接口
      • 相同点
      • 不同点

一、抽象

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 {// 实现抽象方法@Overridevoid 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 {@Overridevoid makeSound() {System.out.println("Woof!");}
}

抽象方法 VS 普通方法

抽象方法(Abstract Method):

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

普通方法(Concrete Method):

  • 有完整的方法体(实现)。
  • 可以在普通类或抽象类中定义。
  • 子类可以继承并重写(覆盖)普通方法。
class Dog extends Animal {@Overridevoid 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 {@Overridepublic void baseMethod() {System.out.println("Implementing baseMethod");}@Overridepublic 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一文搞懂抽象和接口 类与类之间的关系 抽象类与接口的相同点与不同点(多代码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100181

相关文章

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方