抽象类、普通类和接口的区别详细讲解(面试题)

14、多层螺旋 CT 技术详解 本文详细解析了多层螺旋CT(MSCT)技术的原理与应用,涵盖其相对于单层螺旋CT的优势,包括图像采集速度提升、分辨率提高和噪声降低。文章深入探讨了扫描仪的几何结构、离散投影模型以及关键参数如切片宽度和螺距的影响,并重点介绍了z-滤波重建算法及其离散实现流程。通过流程图和公式推导,系统梳理了从投影获取到图像重建的全过程。同时分析了MSCT在临床中的实际应用案例及未来发展趋势,如更高分辨率、更低辐射剂量和智能化算法等方向,全面展示了MSCT在现代医学影像中的核心价值。 阅读详情

抽象类、普通类和接口是面向对象编程中三个核心概念,它们在设计模式、代码复用和扩展性上有不同的作用。下面用详细的对比和示例来讲解它们的区别。


1. 普通类(Concrete Class)

  • 定义:普通类是具体实现所有方法的类,可以直接实例化对象。
  • 核心特点:
    • 完全实现的方法:所有方法都有具体实现。
    • 直接实例化:可以通过 new 关键字创建对象。
    • 可继承性:可以作为父类被其他类继承,或独立使用。
  • 适用场景:定义具体的对象或行为(如 String、ArrayList)。

示例:

// 普通类:可以直接实例化
class Dog {
    private String name;

    public Dog(String name) {
        this.name = name;
    }

    // 具体方法
    public void bark() {
        System.out.println(name + " 汪汪叫!");
    }
}

// 使用
Dog myDog = new Dog("小黑");
myDog.bark(); // 输出:小黑 汪汪叫!

2. 抽象类(Abstract Class)

  • 定义:用 abstract 声明的类,不能直接实例化,可以包含抽象方法(无实现)和具体方法(有实现)。
  • 核心特点:
    • 不可实例化:必须通过子类继承并实现抽象方法后才能使用。
    • 抽象方法:用 abstract 声明的方法,没有方法体(如 void run();)。
    • 混合实现:可以同时包含抽象方法和具体方法。
    • 构造方法:可以有构造方法(供子类初始化时调用)。
  • 适用场景:定义公共代码(如模板方法模式)和强制子类实现特定行为。

示例:

// 抽象类:不能直接实例化
abstract class Animal {
    protected String name;

    public Animal(String name) {
        this.name = name;
    }

    // 抽象方法(子类必须实现)
    public abstract void makeSound();

    // 具体方法(子类可以直接继承)
    public void sleep() {
        System.out.println(name + " 正在睡觉...");
    }
}

// 子类必须实现抽象方法
class Cat extends Animal {
    public Cat(String name) {
        super(name);
    }

    @Override
    public void makeSound() {
        System.out.println(name + " 喵喵叫!");
    }
}

// 使用
Animal myCat = new Cat("小白");
myCat.makeSound(); // 输出:小白 喵喵叫!
myCat.sleep();     // 输出:小白 正在睡觉...

3. 接口(Interface)

  • 定义:用 interface 声明的类型,完全抽象(Java 8 前),定义一组方法规范,不包含具体实现。
  • 核心特点:
    • 完全抽象(默认):所有方法默认是 public abstract 的(Java 8 前)。
    • 默认方法:Java 8 后允许用 default 定义具体方法。
    • 静态方法:Java 8 后允许定义静态方法。
    • 多继承:一个类可以实现多个接口。
    • 无状态:不能包含实例字段(只有 public static final 常量)。
  • 适用场景:定义行为规范(如 Runnable、Comparable)。

示例:

// 接口:定义行为规范
interface Flyable {
    // 抽象方法(默认 public abstract)
    void fly();

    // 默认方法(Java 8+)
    default void land() {
        System.out.println("正在着陆...");
    }

    // 静态方法(Java 8+)
    static void checkFuel() {
        System.out.println("燃料检查完成!");
    }
}

// 实现接口
class Bird implements Flyable {
    @Override
    public void fly() {
        System.out.println("鸟儿在飞翔!");
    }
}

// 使用
Bird sparrow = new Bird();
sparrow.fly();   // 输出:鸟儿在飞翔!
sparrow.land();  // 输出:正在着陆...
Flyable.checkFuel(); // 输出:燃料检查完成!

三者的核心区别对比表

特性普通类抽象类接口(Java 8+)
关键字无abstractinterface
实例化可以直接实例化不能直接实例化不能直接实例化
方法实现所有方法必须实现可以包含抽象方法和具体方法默认只有抽象方法,但支持 default 和 static 方法
字段可以有实例字段可以有实例字段只能有 public static final 常量
构造方法有有无
继承/实现单继承(extends)单继承(extends)多实现(implements)
设计目的具体实现定义部分规范 + 公共代码定义纯行为规范

关键使用场景总结

  1. 普通类:

    • 需要直接实例化对象。
    • 所有方法都有具体实现。
    • 例如:工具类(StringUtils)、实体类(User)。
  2. 抽象类:

    • 需要定义公共代码,同时强制子类实现某些方法。
    • 适合模板方法模式(定义算法骨架)。
    • 例如:InputStream(定义读取流程,子类实现具体细节)。
  3. 接口:

    • 定义行为规范,不关心具体实现。
    • 需要实现多继承(如一个类同时实现 Runnable 和 Serializable)。
    • 例如:Comparable(定义比较规则)、List(定义集合操作)。

如何选择?

  1. 优先用接口:

    • 需要多继承。
    • 定义纯行为规范(如 Runnable 的 run())。
    • 例如:微服务中的 API 定义。
  2. 用抽象类:

    • 需要复用代码(如公共方法)。
    • 需要部分方法由子类实现。
    • 例如:AbstractList 提供集合的通用实现,子类只需实现 get() 和 size()。
  3. 用普通类:

    • 所有方法都已明确实现。
    • 不需要被扩展(用 final 修饰防止继承)。

常见误区

  1. 抽象类 vs 接口:

    • 抽象类可以包含字段和构造方法,接口不能。
    • 接口可以实现多继承,抽象类只能单继承。
  2. Java 8 后的接口:

    • 接口的 default 方法是为了向后兼容,避免破坏现有实现。
    • 如果多个接口有相同的 default 方法,实现类必须重写该方法。
  3. 抽象类可以有 main 方法:

    • 抽象类可以有 main 方法,但不能实例化自身(只能通过子类)。

通过合理使用抽象类、普通类和接口,可以设计出高内聚、低耦合、易于扩展的代码结构。

高通MBIM拨号流程简述 高通平台MBIM流程简述 阅读详情

相关推荐

C++坦克大战源代码

【代码】C++坦克大战源代码。

强国豪,林中霖 2608

普通类和抽象类的区别

普通类和抽象类的区别

weixin_52793965的博客 2万+

Julia Ann老司机管理系统

https://content.badgirlsusa.com/Julia_Ann-Sexy_Julia_Ann_Fucks_A_Lil_Elf's_Big_Cock_/Julia-Ann-Naughty-America-%E6%80%A7%E6%84%9F%E7%9A%84%E8%A3%98%E8%8E%89%E5%A9%AD%E5%AE%89%E4%BA%82%E6%90%9E-lil-%E7%B2%BE%E9%9D%88%E7%9A%84%E5%A4%A7%E5%85%AC%E9%9B%9E-2020

www_oracle_com的博客 22万+

【普通类和抽象类有哪些区别?】

java 普通类和抽象类有哪些区别?

uutale的博客 1449

Shopee动态参数x-sap-Ri与x-sap-Sec逆向解析实战

现代电商前端反爬普遍采用动态参数校验机制,其核心是将设备指纹、DOM状态与时间上下文耦合生成不可复用的请求凭证。x-sap-Ri本质是渲染上下文唯一标识,依赖真实浏览器环境中的DOM树结构、Canvas像素指纹及毫秒级时间扰动;x-sap-Sec则是基于该标识与服务端同步密钥生成的HMAC-SHA256签名,具备强时效性与密钥轮换特性。这类机制显著提升了自动化采集门槛,广泛应用于Shopee商品详情页等高价值数据接口。本文聚焦于从Chrome DevTools调试出发,系统还原参数生成逻辑,覆盖DOM一致性

weixin_30603633的博客 896

在 RAP 中把业务对象“搬到网口上”:service definition 与 service binding 的全流程、范式与实战

本文解析了SAP ABAP开发中service definition和service binding的关键作用。service definition负责选择要暴露的CDS实体和行为,形成服务模型;而service binding则将服务绑定到具体协议(如OData),生成可访问的端点。两者分离带来三大优势:支持同一模型多重发布、降低环境迁移耦合度、强化安全治理。文章通过预订业务对象的端到端示例,展示了如何从CDS建模到生成Fiori Elements预览。最后以售后工单业务为例,说明这种架构如何支持内外服务

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 390

抽象类和普通类的区别-Gtcxy

另外我写的不一定是对的,学会自己思考,如有不对之处,请前辈指教   抽象类和普通类主要有三点比较大的区别:   1.首先应该知道,抽象类是不能被实例化的,就是不能用new调出构造方法创建对象,而普通类则反之!         2.抽象类的访问权限限于Public和Protected,因为抽象类的方法是需要继承之后让子类去实现的,如果为Private,则无法被子类继承,子类也无...

光头程序猿 1万+

Vue3 - [兼容PC和手机H5] 详细监听浏览器刷新 / 关闭 / 前进后退事件,用户点击关闭和刷新页面前 “拦截“ 操作并弹出提示框(实时监听用户关闭或刷新网页,触发时文字提醒并执行自定义操作)

vue3监听页面关闭和刷新,vue3中如何监听页面刷新和关闭事件,vue3中监听浏览器窗口关闭事件,并在窗口关闭进行操作,vue3怎么只在某个页面监听,其他页面不监听,vue3监听刷新和关闭怎么离开页面时注销释放,vue3怎么阻止浏览器前进和后退并提示,页面跳转离开后依旧可以监听到刷新和关闭,vue3怎么知道用户关闭了网页,vue3如何监听刷新网页操作并截断,vue3移动端手机h5网页手机网站监听浏览器刷新关闭,vue3当页面关闭或刷新时怎么提示用户离开不保存数据,vue3项目监听浏览器窗口或标签页关闭,并

🏆 前端领域优质创作者 1万+

类 与抽象类的区别

1、抽象类声明时要使用abstract关键字来定义,而普通类可以是public , private 等; 2、抽象类里的方法不能有方法的主体, 只能是方法的声明,例如 abstract void AMetho,而普通类的方法可以有主体。 3、抽象类被继承时、子类必须实现它的所有方法,而普通类不需要; 4、抽象类的方法在扩展性和延伸性方面要比普通类的好; 5、抽象类可以应用多态,但是普通类不可以 ...

stone_tomcate的博客 2858

高渗透率光伏接入配电网的电压越限与谐波治理:基于VSG构网型控制与SVG+APF联合补偿的Simulink仿真研究

本文针对高渗透率光伏接入配电网引发的电压越限和谐波畸变问题,提出了一种分层递进的综合治理方案。通过建立IEEE 33节点配电网的Simulink仿真模型,首先验证了传统跟网型控制下光伏渗透率提高导致的电压越上限(最高达1.08 p.u.)和系统谐波畸变严重(THD达8.72%)问题。进而提出:1)将部分光伏逆变器改造为构网型VSG控制,利用其无功调压能力与虚拟阻抗技术实现本地治理;2)在关键节点加装SVG+APF联合补偿装置进行全局动态无功补偿与谐波滤除。仿真结果表明,该方案能将节点电压控制在0.94-1.

huanghm88的专栏 578

如何在飞腾平台上安装Ubuntu操作系统

注意: 若主板上配置的是NVME硬盘,在进行内核配置时,需要将内核的NEME驱动勾选上,否则移植内核时,无法找到文件系统,进不去操作系统。可以通过rufus软件将镜像做到U盘中,本次使用版本为Rufus 3.9.124 ,其他版本也可以。不要下载live版本的,没有准备网络环境,是一个头疼的事情,笔者暂时没有实现网络安装。将U盘接到主板usb口上,接上串口,显示器,,必需串口有打印才可以安装。可以通过dd命令,将iso安装到U盘。安装的是最小系统,缺少很多命令,需要联网更新,或则更换飞腾专用内核。

技术联盟 2645

JAVA SE上——八股1

在 Java 中,引用拷贝(Reference Copy)是指将一个对象的引用赋值给另一个变量。换句话说,两个变量指向同一个对象,而不是创建一个新的对象。这种操作不会复制对象本身,而是复制对象的引用地址。(1)引用拷贝的工作原理当我们在 Java 中操作对象时,变量实际上==存储的是对象的引用(即内存地址),而不是对象本身。引用拷贝的核心在于:原始变量和新变量都指向同一个对象。==对其中一个变量的操作会影响另一个变量,因为它们共享同一个对象。(2)引用拷贝的特点共享对象。

weixin_71184753的博客 883

【精细解读】xapp585(多通道LVDS接口ADC)

xapp585的参考设计有Verilog和VHDL两种源码。

FPGA艺术家的博客 532

Java抽象类深度拆解:语法、JVM原理与面试实战

在面向对象编程中,抽象是建模的核心手段之一。Java语言通过抽象类与抽象方法,让开发者能够定义不完整的“模板类”,将共同的状态与行为沉淀在父类,而把变化的部分交由子类实现。这套机制在编译期约束了子类必须实现关键方法,从而降低运行时出错的概率,也为代码复用和架构演进提供了坚实基础。从实际应用来看,模板方法模式正是抽象类最典型的场景,通过固化业务流程骨架、开放步骤钩子,让团队协作与后期维护更加高效。此外,理解抽象类不能实例化的本质,还需深入JVM方法查找与类加载机制。对于Java开发者而言,掌握抽象类与接口的选

weixin_32175665的博客 297

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

抽象类和接口有什么区别

抽象类和接口并不能互相替代。抽象类和接口各有不可替代的作用。

GX的博客 9万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

接口、抽象类、普通类

不可以的。final的类不能被重写和继承,而abstract的类是抽象类,本身没有实现,只能通过子类来实现,也就是说必须被继承。抽象类中不能有static,final,private修饰的方法被static修饰的方法属于类,是类自己的东西,不是给子类来继承的private的访问权限是本类中,子类继承父类后,是无法重写private修饰的方法的抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。

qq_44721738的博客 1086

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

接口和抽象类的区别(面试题)

接口和抽象类的区别(*) 语法上 相同点 接口和抽象类都能定义属性和方法 接口和抽象类都只是特殊的类,都是通过子类来操作 抽象类和接口中都可以没有抽象方法 接口和抽象类都不能直接创建对象 接口和抽象类都可以利用多态操作 抽象类和接口的子类都必须实现里面的抽象方法 jdk1.8以后,接口和抽象类都可以拥有带有方法体的方法 不同点 接口可以多实现,而抽象类只能单继承 抽象类中的方法,可以用protect和abstract修饰,而接口中,都是默认的public abstract修饰 抽象类可以像普通类一

小鬼的博客 7214

接口和抽象类有什么联系和区别?

抽象类: 一个类中有抽象方法,这个类就变成了抽象类。 抽象类中class的前面必须有abstract修饰符。 抽象类中可以有普通方法,也可以有抽象方法,而抽象方法的个数可以是0个,也可以是多个。 子类继承父类,必须重写全部的抽象方法,除非这个类也变成了抽象类。 接口: 表面上看,接口是一种特殊的抽象类,但是类是类,接口是接口,是并列的关系。 接口中所有方法都必须是抽象的。 接口中方法定义默认...

李人 1万+

普通类和抽象类有哪些区别?

普通类和抽象类有哪些区别? 抽象类不能被实例化 抽象类可以有抽象方法,抽象方法只需申明,无需实现 含有抽象方法的类必须申明为抽象类 抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类 抽象方法不能被声明为静态 抽象方法不能用private修饰 抽象方法不能用final修饰 【Java面试题与答案】整理推荐 基础与语法 集合 网络编程 并发编程 Web ...

ConstXiong 3万+

抽象类和普通类的区别

抽象类和接口 任务 1.了解抽象类和普通类的区别 2.会使用抽象类和抽象方法 3.会定义接口、了解接口的含义和作用 1.抽象类和普通类的区别 在编写汽车租赁系统的时候,我们编写了一个方法。 public abstract class Motor{ // 车辆总类(父类)(有抽象方法的必为抽象类)// 省略属性... // 我们在这里计算机金额是定义为double类型但实际上我们不会用d...

weixin_42561467的博客 1917

Java 面试题:Java 中接口和抽象类有什么区别

在 Java 编程中,接口(Interface)和抽象类(Abstract Class)是面向对象编程的重要组成部分。它们都提供了一种机制,允许开发者定义抽象的、可以在具体类中实现的行为。然而,接口和抽象类在结构和用法上有一些显著的区别,这些区别使得它们在不同的情境下适用。理解这些差异对于设计健壮、灵活和可维护的代码至关重要。

栗筝i的博客 3226

java中接口和抽象类的区别

金三银四马上就到了,希望大家能好好学习一下这些技术点学习视频:《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!面试真题:[外链图片转存中…(img-y4cDQOKR-1711982952870)]《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

WJud11的博客 671

抽象类和普通类的区别??(面试问题)

面试问题: 抽象类和普通类的区别? 如果一个方法里没有实际工作,也就是什么都不用写 .那么我们就可以把这个方法设计成抽象方法,而包含抽象方法的类,顾名思义 :抽象类。 那么抽象类和普通类的区别是什么呢? 抽象类声明时需要abstract 关键字来定义 ,而普通类则可以是public private等。 抽象类里的方法里不能有方法的主体,只能是方法的声明,而普通类里的方法里可以有主体。 抽象类是不...

yiqianwan__的博客 1805

Java面试题八:抽象类和接口的区别,【面试必备

1、接口中的所有属性默认为:public static final ****;2、接口中的所有方法默认为:public abstract ****;3、接口不再像类一样用关键字 extends去“继承”,而是用 implements 去“实现”,也就是说类和接口的关系叫做实现,(例如:A类实现了B接口,那么成为A为B接口的实现类。而类与类之间的继承的话,叫做A类继承了B类,其中B类即为A类的父类)。实现接口与类的继承比较相似具体看一下代码:@Override@Override。

m0_62261166的博客 1167

接口和抽象类有什么区别?

接口和抽象类有什么区别? 抽象类可以有构造方法;接口中不能有构造方法。 抽象类中可以有普通成员变量;接口中没有普通成员变量。 抽象类中可以包含非抽象普通方法;接口中的所有方法必须都是抽象的。 抽象类中的抽象方法的访问权限可以是 public、protected 和 default;接口中的抽象方法只能是 public 类型的,并且默认即为 public abstract 类型。 抽象...

ConstXiong 8666
上一篇: Java代码从编写到运行的详细讲解(跨平台,JVM,字节码,机器码)
下一篇: 介绍一下java里面的静态变量,静态方法,静态代码块(面试题)
小李不秃头♛
博客等级 码龄2年 619粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值