整理好了!2024年最常见 100 道 Java基础面试题(三十四)

2024-05-08 05:04

本文主要是介绍整理好了!2024年最常见 100 道 Java基础面试题(三十四),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上一篇地址:整理好了!2024年最常见 100 道 Java基础面试题(三十三)-CSDN博客

六十七、内部类可以访问其外部类的成员吗?

内部类可以访问其外部类的成员,包括私有成员(private members)。这是因为内部类与外部类具有亲密的关系,内部类是外部类的一个成员,就像外部类的一个属性或方法一样。这种访问能力是内部类的一个重要特性,它允许内部类更深入地与外部类交互。

访问权限

  1. 访问实例变量:内部类可以直接访问外部类的实例变量,包括那些被声明为 private 的变量。

  2. 访问方法:内部类可以调用外部类的方法,即使是 private 方法。

  3. 构造函数:内部类可以访问外部类的构造函数,并且在创建内部类对象时,隐式地创建了外部类对象。

  4. 访问静态成员:如果内部类需要访问外部类的静态成员,它必须通过外部类的对象或类名来访问。

示例

public class OuterClass {private String outerField = "外部类的字段";private void outerMethod() {System.out.println("这是外部类的方法");}public class InnerClass {public void display() {// 直接访问外部类的实例变量和方法System.out.println(outerField);outerMethod();// 如果需要,也可以访问外部类的静态成员// System.out.println(OuterClass.outerStaticField);}}private static String outerStaticField = "外部类的静态字段";
}// 外部类的对象
OuterClass outerObject = new OuterClass();
// 内部类的对象
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
innerObject.display();

在这个示例中,内部类 InnerClass 直接访问了外部类 OuterClass 的私有字段 outerField 和私有方法 outerMethod

注意事项

  • 内部类对象的存在依赖于外部类对象,这意味着在创建内部类对象之前,必须先有外部类的对象。
  • 如果内部类中定义的成员与外部类中的成员同名,内部类可以直接访问自己的成员,而外部类的同名成员需要通过外部类对象来访问。

总结

内部类可以访问外部类的成员,包括私有成员,这是内部类设计的一个重要优势。这种访问能力使得内部类非常适合实现与外部类紧密相关的行为,同时保持封装性。然而,这也意味着内部类对外部类的依赖性较高,因此在设计内部类时需要仔细考虑其对外部类的影响。

六十八、接口和抽象类有什么区别?

在Java中,接口(Interface)和抽象类(Abstract Class)都是实现面向对象编程中的抽象思维的工具,但它们在几个关键方面存在区别:

抽象类

  1. 定义:抽象类使用 abstract 关键字声明,它可以包含抽象方法和具体方法。
  2. 实例化:抽象类不能被直接实例化,但可以被继承,其子类可以实现抽象类中的抽象方法。
  3. 成员变量:抽象类可以有实例变量和静态变量。
  4. 构造方法:抽象类可以有构造方法,其子类在创建对象时会调用这些构造方法。
  5. 方法实现:抽象类可以提供方法的部分或全部实现。
  6. 使用场景:当多个类有一些共同的属性和方法,但又有各自独特的实现时,适合使用抽象类。

接口

  1. 定义:接口使用 interface 关键字声明,它最初只能包含抽象方法和常量。
  2. 实例化:接口不能被直接实例化,但可以被实现(implement),实现接口的类必须提供接口中所有抽象方法的具体实现。
  3. 成员变量:从Java 8开始,接口可以有默认方法和静态常量。
  4. 构造方法:接口不能有构造方法。
  5. 方法实现:在Java 8之前,接口中的方法默认都是抽象的,不能有实现。但从Java 8开始,接口可以有默认方法(带有默认实现的方法)。
  6. 使用场景:当需要定义一个规范或协议,希望不同的类以统一的方式实现时,适合使用接口。

主要区别

  1. 继承:一个类只能继承一个抽象类,但可以实现多个接口。
  2. 构造方法:抽象类可以有构造方法,接口不能有构造方法。
  3. 成员变量:接口中的变量默认是 public static final 的,而抽象类中变量的访问修饰符可以任意定义。
  4. 方法实现:抽象类可以有抽象方法和具体方法,接口中的所有方法在Java 8之前默认是抽象的,但可以有默认方法和静态方法。
  5. 访问控制:抽象类中的方法可以有任意访问修饰符,而接口中的方法在Java 9之前默认是 public 的,从Java 9开始,默认是 public abstract 的。
  6. 设计目的:抽象类用于继承,它允许一个类作为另一个类的基类,而接口用于实现,它定义了类必须遵循的协议或行为规范。

示例

// 抽象类
public abstract class Animal {public abstract void makeSound();public void eat() {System.out.println("Animal is eating.");}
}// 接口
public interface Runnable {void run();
}// 实现抽象类
public class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("Woof!");}
}// 实现接口
public class Horse implements Runnable {@Overridepublic void run() {System.out.println("Horse is running.");}
}

在这个示例中,Animal 是一个抽象类,它有一个抽象方法 makeSound() 和一个具体方法 eat()Dog 类继承自 Animal 并实现了 makeSound() 方法。Runnable 是一个接口,它有一个抽象方法 run()Horse 类实现了 Runnable 接口并提供了 run() 方法的实现。

总结

抽象类和接口在Java中提供了不同的抽象机制。抽象类允许你创建一个基类,而接口定义了一组可以被任何类实现的方法。理解它们之间的区别有助于你决定在特定的编程场景中使用哪种抽象机制。

这篇关于整理好了!2024年最常见 100 道 Java基础面试题(三十四)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python按照24个实用大方向精选的上千种工具库汇总整理

《Python按照24个实用大方向精选的上千种工具库汇总整理》本文整理了Python生态中近千个库,涵盖数据处理、图像处理、网络开发、Web框架、人工智能、科学计算、GUI工具、测试框架、环境管理等多... 目录1、数据处理文本处理特殊文本处理html/XML 解析文件处理配置文件处理文档相关日志管理日期和

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.