《Java程序员面试秘笈》—— 面试题5 用自己的语言描述Java中的类和对象

简介: 在处理复杂事物的时候,用到的一种基本手段就是抽象。抽象的目的就是区别事物之间的本质和不同,面向对象编程(OOP)的实质就是利用类和对象来建立抽象模型。

本节书摘来异步社区《Java程序员面试秘笈》一书中的第1章,第1.5节,作者:常建功,更多章节内容可以访问云栖社区“异步社区”公众号查看。

面试题5 用自己的语言描述Java中的类和对象

下列关于对象的哪一种说法是正确的?请选择一个正确的答案。

(a)对象是可以对其进行实例化从而得到类的东西。

(b)对象是类的实例。

(c)对象是一种蓝本,据此可以创建抽象的具体实现。

(d)对象是指向属性的引用。

(e)对象是一种变量。

考点:该面试题考察求职者对于Java类和对象的理解。

出现频率:

【面试题解析】

1.类

在处理复杂事物的时候,用到的一种基本手段就是抽象。抽象的目的就是区别事物之间的本质和不同,面向对象编程(OOP)的实质就是利用类和对象来建立抽象模型。

类表示了对象的类别,是创建对象的蓝本。建立一个事物的抽象模型,本质上就是表达该事物的性质和行为。使用类来建立抽象模型,是通过在类中定义变量和方法来实现的。

类中定义的属性是一种可存储值的变量,该变量代表着事物的具体性质。类的对象所具有的行是由定义的方法来实现的。类中定义的变量和方法被称为类的成员。

在项目开发中,类一般可以通过UML建模来表示,如图1.1所示。

2c69d64175adc0fcf1b4d5106a5609717d42d207

图1.1中,定义了类Gun的成员,即类Gun的变量和方法。从UML图中可以看到,类定义了如下所示3个变量。

  • caliber:是一个Double类型的变量,表示Gun类所抽象事物(枪)的口径。
  • length:是一个Double类型的变量,表示Gun类所抽象事物(枪)的长度。
  • gun_type:是一个字符串类型的变量,表示Gun类所抽象事物(枪)的类型,例如是手枪还是突击步枪。

同时类中定义了如下所示3个方法。

  • fire:定义了Gun的开火行为,及fire方法。
  • maintenance:定义了Gun的维护方法。
  • Gun:定义了一个同类同名的构造方法。

开发者可以通过UML生成代码工具,或者是手工在编辑器中建立图1.1中所示的类,如下所示:

public class Gun {
    // 定义枪的口径
    public Double caliber;
    // 定义枪的长度
    public Double length;
    // 定义枪的类型
    public int gun_type;
    // 构造方法
    public Gun() {
    }
   // 带参数的构造方法
    public Gun(String name) {
    }
    // 开火的方法
    public void fire() {
      System._out_.println(gun_type +" is fireing");
    }
    // 维护的方法
    public Boolean maintenance() {
      return true;
    }
}

2.对象

对象是类的实例。对象在构造时以类为蓝本,创建对象的过程叫做实例化。对象是类所表示的抽象事物的具体实例。例如前面所讲述的Gun类,那么可以根据Gun类创建一个ak47的对象,即Gun的具体实现。

对象可以使用UML来表示,如图1.2所示。

494e96418c1626522fafaa18ad7a6399af4a2116

ak47是根据Gun类创建的一个对象,在Java程序中,可以使用如下代码创建一个Gun对象:

……
public static void main(String[] args) {
     //建立一个Gun类对象,即Gun类的实例ak47
     Gun ak47=new Gun();
     //定义ak47的口径
     ak47.caliber=7.6;
     //定义ak47的长度
     ak47.length=57.8;
     //定义ak47的类型
     ak47.gun_type="AK47";
     //调用fire方法
     ak47.fire();
    }
……

运行该示例,结果如下:

AK47 is firing

参考答案:(b)。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章
|
12天前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
36 14
|
18天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
39 8
|
17天前
|
Java 编译器 程序员
Java面试高频题:用最优解法算出2乘以8!
本文探讨了面试中一个看似简单的数学问题——如何高效计算2×8。从直接使用乘法、位运算优化、编译器优化、加法实现到大整数场景下的处理,全面解析了不同方法的原理和适用场景,帮助读者深入理解计算效率优化的重要性。
24 6
|
18天前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
35 1
|
4月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
29天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
1月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
52 4
|
2月前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
85 2
|
2月前
|
JSON 安全 前端开发
第二次面试总结 - 宏汉科技 - Java后端开发
本文是作者对宏汉科技Java后端开发岗位的第二次面试总结,面试结果不理想,主要原因是Java基础知识掌握不牢固,文章详细列出了面试中被问到的技术问题及答案,包括字符串相关函数、抽象类与接口的区别、Java创建线程池的方式、回调函数、函数式接口、反射以及Java中的集合等。
32 0
|
4月前
|
XML 存储 JSON
【IO面试题 六】、 除了Java自带的序列化之外,你还了解哪些序列化工具?
除了Java自带的序列化,常见的序列化工具还包括JSON(如jackson、gson、fastjson)、Protobuf、Thrift和Avro,各具特点,适用于不同的应用场景和性能需求。