2024年150道高频Java面试题(五)

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

普通类(Concrete Class)与抽象类(Abstract Class)是Java中两种不同的类定义方式,它们之间的主要区别体现在以下几个方面:

  1. 抽象能力:
    • 普通类:可以包含具体实现的方法,也可以没有方法体(通常是默认构造方法)。
    • 抽象类:包含抽象方法的类,即没有方法体的方法,这些方法必须在子类中被实现。
  2. 实例化能力:
    • 普通类:可以被直接实例化,创建对象。
    • 抽象类:不能被直接实例化,只能通过其子类进行实例化。
  3. 抽象方法:
    • 普通类:不能包含抽象方法,所有的方法都必须有具体实现。
    • 抽象类:可以包含抽象方法,也可以包含具体实现的方法。
  4. 继承:
    • 普通类:可以继承另一个类(可以是普通类或抽象类)并添加新的实现或重写方法。
    • 抽象类:作为其他类的基类,可以被其他类继承,并在子类中实现其抽象方法。
  5. 使用场景:
    • 普通类:适用于那些功能已经明确且不需要进一步抽象的场合。
    • 抽象类:适用于那些部分实现或共享方法的场合,需要子类来进一步定义具体行为。

以下是代码示例:

// 抽象类示例
public abstract class Animal {
    // 抽象方法
    public abstract void makeSound();
    
    // 具体实现的方法
    public void eat() {
        System.out.println("This animal eats food.");
    }
}

// 普通类示例
public class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("The dog barks");
    }
}

在上面的例子中,Animal 是一个抽象类,包含一个抽象方法 makeSound() 和一个具体实现的方法 eat()。而 Dog 是一个普通类,它继承自 Animal 类,并实现了抽象方法 makeSound()

总结来说,普通类和抽象类在Java中主要用于实现不同的设计模式,普通类更注重具体实现,而抽象类则提供了定义抽象方法、共享实现等能力,为多态和继承提供了基础。

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

接口(Interface)和抽象类(Abstract Class)在Java中都是用来定义抽象层次和实现多态的机制。它们之间有几个主要的区别:

  1. 定义与继承
    • 接口:一个接口定义了一组规范(方法签名),但不包含实现。它使用interface关键字来声明。一个类可以实现多个接口。
    • 抽象类:一个抽象类可以包含具体实现的方法和/或抽象方法(没有具体实现的方法)。它使用abstract关键字来声明。一个类只能继承一个抽象类(因为Java不支持多重继承)。
  2. 默认方法与抽象方法
    • 接口:从Java 8开始,接口可以包含默认方法(有具体实现的方法)和静态方法。接口中的方法默认是public abstract的,除非它们被明确指定为默认方法或静态方法。
    • 抽象类:抽象类可以包含抽象方法和非抽象方法(即具体实现的方法)。
  3. 成员变量
    • 接口:接口中的成员变量默认是public static final的,即它们都是常量。
    • 抽象类:抽象类可以有各种类型的成员变量,包括非final变量。
  4. 构造器
    • 接口:接口不能有构造器。
    • 抽象类:抽象类可以有构造器。
  5. 实现方式
    • 接口:通过implements关键字实现接口。
    • 抽象类:通过extends关键字继承抽象类。

以下是简单的示例:

接口示例:

public interface Animal {
    void makeSound(); // abstract method
    void eat();       // abstract method
    // From Java 8 onwards
    default void sleep() {
        System.out.println("Animal sleeps");
    }
}

抽象类示例:

public abstract class Mammal {
    public abstract void makeSound();
    public void eat() {
        System.out.println("Mammal eats");
    }
}

总结:
接口更注重于定义公共的方法规范,适合定义多个类共享的行为。抽象类则更适用于那些部分实现或共享代码的情况,尤其是当你希望某些子类共享方法实现时。选择使用接口还是抽象类,通常取决于你的设计意图和具体的使用场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/498208.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

踏上机器学习之路:探索数据科学的奥秘与魅力

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

hxp CTF 2021 - A New Novel LFI(新颖的解法)

一、环境 unbentu,docker https://2021.ctf.link/assets/files/includers%20revenge-25377e1ebb23d014.tar.xz 二、解析 PHP Filter 当中有一种 convert.iconv 的 Filter ,可以用来将数据从字符集 A 转换为字符集 B ,其中这两个字符集可以…

记录pycharm配置Anaconda环境时没有反应的问题

记录pycharm配置Anaconda环境时没有反应的问题 背景 下载最新pycharm后在设置中配置add interpreter Anaconda环境时,x选中conda.ba文件点击Load Enviroments后,没有反应,就闪了一下,也有添加成功 探索路程 试过了重启&#x…

NineData与StarRocks商业化运营公司镜舟科技完成产品兼容认证

近日,镜舟科技与NineData完成产品兼容测试。在经过联合测试后,镜舟科技旗下产品与NineData云原生智能数据管理平台完全兼容,整体运行高效稳定。 镜舟科技致力于帮助中国企业构建卓越的数据分析系统,打造独具竞争力的“数据护城河”…

量化交易入门(二十五)什么是RSI,原理和炒股实操

前面我们了解了KDJ,MACD,MTM三个技术指标,也进行了回测,结果有好有坏,今天我们来学习第四个指标RSI。RSI指标全称是相对强弱指标(Relative Strength Index),是通过比较一段时期内的平均收盘涨数和平均收盘跌数来分析市…

leetcode热题100.柱状图中最大的矩形

Problem: 84. 柱状图中最大的矩形 文章目录 题目思路复杂度Code 题目 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: 输入:hei…

RAM IP核

1.原理 数据使能信号充当掩码的作用。1表示1字节就是8个位有效。

答题小程序功能细节揭秘:如何提升用户体验和满足用户需求?

答题小程序功能细节体现 随着移动互联网的快速发展,答题小程序成为了用户获取知识、娱乐休闲的重要平台。一款优秀的答题小程序不仅应该具备简洁易用的界面设计,更应该在功能细节上做到极致,以提升用户体验和满足用户需求。本文将从题库随机…

八大技术趋势案例(虚拟现实增强现实)

科技巨变,未来已来,八大技术趋势引领数字化时代。信息技术的迅猛发展,深刻改变了我们的生活、工作和生产方式。人工智能、物联网、云计算、大数据、虚拟现实、增强现实、区块链、量子计算等新兴技术在各行各业得到广泛应用,为各个领域带来了新的活力和变革。 为了更好地了解…

day56 动态规划part13

300. 最长递增子序列 中等 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,…

【FedCoin: A Peer-to-Peer Payment System for Federated Learning】

在这篇论文中,我们提出了FedCoin,一个基于区块链的点对点支付系统,专为联邦学习设计,以实现基于Shapley值的实际利润分配。在FedCoin系统中,区块链共识实体负责计算SV,并且新的区块是基于“Shapley证明”&a…

Linux 入门及其基本指令(上)

目录 0 .引言 1. XShell 远程登录 Linux 1.1 云服务器 1.2. XShell 远程登陆 Linux 2. 详解 Linux 基本指令 2.1 ls 指令 2.2 pwd 指令 2.3 cd 指令 2.4 touch 指令 2.5 mkdir指令 2.6 rmdir指令 && rm 指令 0 .引言 如今,Linux 在服务器…

公众号的AI聊天机器人已修复!谷歌Gemini Pro 10大使用场景解析

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识…

Kafka重要配置参数全面解读(重要)

欢迎来到我的博客,代码的世界里,每一行都是一个故事 Kafka重要配置参数全面解读(重要 前言auto.create.topics.enableauto.leader.rebalance.enablelog.retention.{hour|minutes|ms}offsets.topic.num.partitions 和 offsets.topic.replication.factorlo…

Long long类型比较大小

long 与 Long long类型和Long类型是不一样,long类型属于基本的数据类型,而Long是long类型的包装类。 结论 long是基本数据类型,判断是否相等时使用 ,即可判断值是否相等。(基本数据类型没有equals()方法&#xff0…

JVM之EhCache缓存

EhCache缓存 一、EhCache介绍 在查询数据的时候,数据大多来自数据库,咱们会基于SQL语句的方式与数据库交互,数据库一般会基于本地磁盘IO的形式将数据读取到内存,返回给Java服务端,Java服务端再将数据响应给客户端&am…

Ubuntu下使用vscode进行C/C++开发:进阶篇

在vscode上进行C/C++开发的进阶需求: 1) 编写及调试源码时,可进行断点调试、可跨文件及文件夹进行函数调用。 2) 可生成库及自动提取对应的头文件和库文件。 3) 可基于当前工程资源一键点击验证所提取的库文件的正确性。 4) 可结合find_package实现方便的调用。 对于第一…

LLM之RAG实战(三十五)| 使用LangChain的3种query扩展来优化RAG

RAG有时无法从矢量数据库中检索到正确的文档。比如我们问如下问题: 从1980年到1990年,国际象棋的规则是什么? RAG在矢量数据库中进行相似性搜索,来查询与国际象棋规则问题相关的相关文档。然而,在某些情况下&#xff0…

mysql修改用户权限

https://blog.csdn.net/anzhen0429/article/details/78296814

Elasticsearch 和 Kibana 8.13:简化 kNN 和改进查询并行化

作者:Gilad Gal, Tyler Perkins, Srikanth Manvi, Aris Papadopoulos, Trevor Blackford 在 8.13 版本中,Elastic 引入了向量搜索的重大增强,并将 Cohere 嵌入集成到其统一 inference API 中。这些更新简化了将大型语言模型(LLM&a…
最新文章