【面经总结】Java基础 - 面向对象

面向对象

什么是面向对象

https://www.bilibili.com/video/BV1wZ4y1B7A7

以对象为核心。

类是对象创建的模板,对象是类的实例。

面向对象三大特性是什么

  1. 封装:类的创建者将类具体实现隐藏,使用者只需要使用外部接口即可
  2. 继承:类有子类和父类,有从属关系。提高代码复用性。
  3. 多态:同一个方法可以被不同的对象以不同的方式执行。子类可以替代父类出现在任何需要父类的地方

怎么理解多态的特性

  1. 什么是多态:接口的多种不同的实现方式即为多态。多个对象调用同一个方法,得到不同的结果。
  2. 多态使用: 父类类名 对象 = new 子类类名();
  3. 向上转型(默认):子类型赋值给父类型。对象只能访问父类中的属性和方法,但会优先访问子类重写的方法。
  4. 向下转型:子类型赋值给父类型后,强转回子类型。
class Animal {public void eat() {System.out.println("Animal is eating");}
}class Dog extends Animal {public void bark() {System.out.println("Dog is barking");}
}public class Main {public static void main(String[] args) {// 向上转型Animal myAnimal = new Dog(); myAnimal.eat();// 向下转型if (myAnimal instanceof Dog) {Dog myDog = (Dog) myAnimal;myDog.bark();}}
}

Java为什么只能单继承

https://www.bilibili.com/video/BV14o4y1h7ri/

  1. 使用简单:多继承会导致“钻石问题”,子类有多个相同方法需要继承。
  2. 多继承在其他语言中也不经常使用
  3. Java可以通过实现多个接口实现“多继承”

抽象类和接口

接口和抽象类有什么区别

https://www.bilibili.com/video/BV14T4y1e725/

相同点:

  1. 都可以定义抽象方法,让子类去实现
  2. 都不能实例化

不同点:

  1. 抽象类用继承extend,接口用实现implements
  2. 接口可以多实现,抽象类只能单继承
  3. 抽象类可以实现接口,接口只能继承接口
  4. 抽象类可以定义成员属性,接口只能定义静态常量
  5. 抽象类可以定义构造方法,控制子类实例化。接口没有构造方法。

接口的补充:

  1. Java8:default关键字实现接口默认方法,子类可以不重写。提高兼容性。
  2. Java9:private关键字可以封装私有方法,可以提高默认方法的函数内的代码复用性。

方法重写和重载

方法重载和重写有什么区别

  • 重载:类中定义了多个方法名相同,但参数不同的方法。
  • 重写:子类存在方法与父类的方法的名字相同、参数相同

方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

多态性:相同的名称但有着不同的实现。

内部类

内部类汇总

  1. 成员内部类:在成员位置上定义类
    1. 可以访问外部类静态属性和非静态属性
    2. 外部类成员方法调用成员内部类的方法需要先创建对象
public class User {static String name;int age;class IdCard {String id;public void getIdCardData() {System.out.println(name);System.out.println(id);System.out.println(age);}}IdCard idCard = new IdCard();public void getUserData() {System.out.println(idCard.id);}
}
  1. 局部内部类:在类的方法中定义类
    1. 可以访问外部类静态属性和非静态属性
public class User {static String name;int age;public void say() {class IdCard {String birthday;public void getIdCardData() {System.out.println(name);System.out.println(age);System.out.println(birthday);}}IdCard idCard = new IdCard();idCard.getIdCardData();}
}
  1. 静态(成员)内部类:在成员位置上定义静态类
    1. 只能访问外部类静态属性,不能访问非静态属性
public class User {static String name;int age;static class IdCard {String id;public void getIdCardData() {System.out.println(name);System.out.println(id);// System.out.println(age);}}IdCard idCard = new IdCard();public void getUserData() {System.out.println(idCard.id);}
}
  1. 匿名内部类:只有类体没有类名的类,通常用于创建只需要使用一次的类的实例。
public abstract class Animal {String name;abstract void eat();
}public class Main {public static void main(String[] args) {Animal animal = new Animal() {@Overridevoid eat() {System.out.println("The animal is eating");}};animal.eat();}
}

为什么需要内部类?什么是匿名内部类?

内部类的主要作用是可以访问外部类的私有成员。

匿名内部类是只有类体没有类名的类,通常用于创建只需要使用一次的类的实例。可以简化代码书写,不需要单独定义一个实体类。

静态内部类和非静态内部类有什么区别?

外部属性:

  • 静态内部类只能访问外部类的静态属性
  • 非静态内部类可以访问外部类的静态属性和非静态属性

对外部类实例的依赖:

  • 静态内部类可以直接创建
  • 非静态内部类需要外部类实例才能创建

静态内部类的使用场景是什么?

用来实现单例模式

  • 优点:天然线程安全,实现延迟加载
  • 缺点:第一次加载又有延迟
public class Singleton {public static class Inner {public static final Singleton INSTANCE = new Singleton();}public static Singleton getInstance() {return Inner.INSTANCE;}private Singleton() {}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常用sql

–page– jpa里面的,需要-1Pageable pageable PageRequest.of(pageNumber - 1, pageSize, Sort.by(“classId”).descending()); RepositoryImpl里面的pageable不需要-1 queryListForMySql(sql, pageable, BeanPropertyRowMapper.newInstance(DingStudentDto.class…

Docker Swarm集群部署管理

Docker Swarm集群管理 文章目录 Docker Swarm集群管理资源列表基础环境一、安装Docker二、部署Docker Swarm集群2.1、创建Docker Swarm集群2.2、添加Worker节点到Swarm集群2.3、查看Swarm集群中Node节点的详细状态信息 三、Docker Swarm管理3.1、案例概述3.2、Docker Swarm中的…

Unity Mirror VR联机开发 房间篇

一、需求 在联机时通常有加入房间这个步骤,在mirror示例中也有相应的案例,但是那个比较复杂,我们做教育科普类不需要如此复杂,傻瓜式操作基本就可以了,所以我简化了步骤,省略了点击准备按钮这一步骤&#…

【Web世界探险家】3. CSS美学(二)文本样式

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更…

2024-06-10 问AI: 在大语言模型中,ReAct Agents的理论基础是什么

文心一言 在大语言模型中,ReAct Agents的理论基础主要基于以下几个关键点: 推理与行为的结合:ReAct框架的核心思想是将大型语言模型的推理能力和行为能力相结合。这种结合使得模型能够以交错的方式生成推理步骤和特定于任务的操作&#xff0c…

基于深度学习的中文语音识别模型(支持wav、mp4、m4a等所有格式音频上传)【已开源】

基于深度学习的中文语音识别模型(支持wav、mp4、m4a等所有格式音频上传) 前言 该开源项目旨在提供一个能够自动检测并识别中文语音的模型,支持wav、mp4、m4a等格式的音频文件上传。无论是从录音设备中获取的wav文件,还是从视频中…

CentOS Python 2.7 离线安装 Requests 库保姆级教程

在内网或无网络连接的环境中,Python 开发者经常需要离线安装第三方库。本文将详细介绍如何在 CentOS 系统上,使用 Python 2.7 版本离线安装 Requests 库。Requests 是一个简单易用的 HTTP 库,用于发送各种 HTTP 请求。 前提条件 CentOS 系统…

C++进阶教程

一、引言 C是一种高效、强大且灵活的编程语言,广泛应用于系统软件开发、游戏开发、科学计算等领域。对于已经掌握C基础知识的开发者来说,进阶学习C将帮助他们更深入地理解这门语言,并提升编程能力。本教程将介绍C中的一些高级特性和技术&…

外部排序快速入门详解:基本原理,败者树,置换-选择排序,最佳归并树

文章目录 外部排序1.最基本的外部排序原理2.外部排序的优化2.1 败者树优化方法2.2 置换-选择排序优化方法2.3 最佳归并树 外部排序 为什么要学习外部排序? 答: 在处理数据的过程中,我们需要把磁盘(外存)中存储的数据拿到内存中处理…

ue5创建地图瓦片

先在虚幻商城下载免费的paperzd插件,并启用。 导入资源后,先通过应用paper2d纹理资源,将去掉导入ue时产生的边缘模糊,再点击下面的创建瓦片集, 打开瓦片集,发现选中不对, 改变瓦片大小为16*…

ChatGPT对话基本原则和玩法

一、使用三个准备 1.1 认知上 超级学霸,几乎所有的工作/生活场景,都可以找它帮忙 ChatGPT作为一个人工智能语言模型,具有强大的知识储备和处理能力。这意味着在许多工作和生活场景中,你都可以向它请教问题或寻求帮助。无论是科…

Virustotal查询恶意进程

1、使用netstat查看可疑进程 执行ls -al /proc/$PID/exe确认可疑进程对应的文件;若文件未被删除,则直接上传文件到Virustotal进行检测,或者计算出文件对应的md5,使用md5去Virustotal进行查询;若文件已被删除&#xff0…

Python第二语言(七、Python模块)

目录 1. 什么是模块 2. 基本语法 2.1 模块的导入方式 2.2 基本语法 import 模块名 2.3 基本语法 from 模块名 import 功能名 2.4 基本语法as 别名 3. 自定义模块 4. 调用自定义模块时,如何让其模块中的函数不被调用(__name__) 5. 调…

java面试题:hashCode的作用

在Java集合中,hashCode起着至关重要的作用,特别是在基于哈希的集合类如HashMap、HashSet和Hashtable中。以下是hashCode在集合中的主要作用: 快速查找和定位: hashCode被用作确定对象在哈希表中存储位置的索引(或称为“…

基于SSM+Jsp的家用电器销售网站

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

微信小程序获取 OpenId 和 UnionId

文章目录 1.什么是 OpenId 和 UnionId?2.获取 OpenId 和 UnionId 的办法3.备注 前言:最近开发小程序,需要通过用户登录的唯一值存储数据,查看手册发现要使用的是 “OpenId” 和 “UnionId” 1.什么是 OpenId 和 UnionId&#xff1…

仓储系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,用户管理,试剂管理,安全管理,存储管理 用户账户功能包括:系统首页,个人中心,试剂管理,安全管…

54.ReentrantReadWriteLock

读写锁用的是同一个Sycn同步器,因此等待队列、state等也是同一个。 使用场景 当读操作远远高于写操作时,用读写锁让读可以并发,提高性能。读写是互斥的。 使用读锁保护数据的read方法,写锁保护数据的write方法。 读读之间是并发 @Slf4j public class DataContainer {p…

快速搭建rtsp server(Ubuntu)

在现代视频监控和实时视频流媒体应用中,实时流协议(RTSP)服务器扮演着至关重要的角色。无论是家庭安防系统、企业级监控还是流媒体服务,RTSP服务器都能提供高效、稳定的解决方案。然而,对于许多初学者或开发者来说&…

机器学习--生成式模型和判别式模型的具体分析

文章目录 生成式模型和判别式模型的具体分析生成式模型定义工作原理优点缺点常见模型 判别式模型 总结生成式模型判别式模型 生成式模型和判别式模型的具体分析 生成式模型和判别式模型在机器学习中有着不同的目标、应用场景和性能特点。以下将详细分析它们的定义、工作原理、…