Java面试问题-面向对象

Q1。什么是多态?

多态被简要描述为“一个接口,许多实现”。多态性是能够在不同上下文中为某事物赋予不同含义或用法的一种特征-具体来说,就是允许诸如变量,函数或对象之类的实体具有多种形式。多态有两种类型:

  1. 编译时多态
  2. 运行时多态

编译时多态是方法重载,而运行时多态是使用继承和接口完成的。

Q2。什么是运行时多态或动态方法分派?

在Java中,运行时多态性或动态方法分派是一个在运行时而不是在编译时解决对覆盖方法的调用的过程。在此过程中,将通过超类的引用变量调用重写的方法。让我们看下面的示例,以更好地理解它。

class Car {
void run() {
System.out.println( & ldquo; car is running & rdquo;);
}
} class Audi extends Car {
void run() {
System.out.prinltn( & ldquo; Audi is running safely with 100 km & rdquo;);
} public static void main(String args[]) {
Car b = new Audi(); //upcasting
b.run();
}
}

Q3。Java中的抽象是什么?

抽象是指处理思想而不是事件的质量。它主要处理隐藏细节并向用户显示基本内容。因此,您可以说Java中的抽象是向用户隐藏实现细节并仅向用户显示功能的过程。可以通过两种方式实现抽象:

  1. 抽象类(可以实现0-100%的抽象)
  2. 接口(可以实现100%的抽象)

Q4。Java接口是什么意思?

Java中的接口是类的蓝图,或者可以说它是抽象方法和静态常量的集合。在接口中,每个方法都是公共的和抽象的,但不包含任何构造函数。因此,接口基本上是一组带有空主体的相关方法。例:

public interface Animal {
public void eat();
public void sleep();
public void run();
}

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

抽象类 接口
抽象类可以提供完整的默认代码和/或仅提供必须覆盖的详细信息 一个接口根本不能提供任何代码,只能提供签名
对于抽象类,一个类只能扩展一个抽象类 一个类可以实现多个接口
抽象类可以具有非抽象方法 接口的所有方法都是抽象的
抽象类可以具有实例变量 接口不能有实例变量
抽象类可以具有任何可见性:公共,私有,受保护 接口可见性必须是公共的(或无)
如果我们向抽象类添加新方法,则可以选择提供默认实现,因此所有现有代码都可能正常工作 如果我们向接口添加新方法,则必须跟踪该接口的所有实现并为新方法定义实现
抽象类可以包含构造函数 接口不能包含构造函数
抽象类很快 接口很慢,因为它需要额外的间接才能在实际的类中找到对应的方法

Q6。Java中的继承是什么?

Java中的继承是一个类的属性可以被另一类继承的概念。它有助于重用代码并在不同类之间建立关系。在两种类型的类之间执行继承:

  1. 超级类(超级类或基础类)
  2. 子类(子类或派生类)

继承属性的类称为“子类”,而继承属性的类称为“父类”。

Q7。Java中继承有哪些不同类型?

Java支持四种继承类型:

  1. 单继承:在单继承中,一个类继承另一个属性,即将只有一个父类和一个子类。
  2. 多级继承:当一个类派生自一个类,而该类又派生自另一个类,即一个类有多个父类但处于不同级别时,这种继承类型称为多级继承。
  3. 分层继承:当一个类具有多个子类(子类),或者换句话说,一个以上的子类具有相同的父类时,则这种继承称为分层。
  4. 混合继承:混合继承是两种或多种继承的组合。

Q8。什么是方法重载和方法重载?

方法重载:

  • 在“方法重载”中,相同类的方法共享相同的名称,但是每个方法必须具有不同数量的参数或具有不同类型和顺序的参数。
  • 方法重载是为该方法的行为“增加”或“扩展”更多。
  • 它是编译时的多态性。
  • 这些方法必须具有不同的签名。
  • 它在方法重载中可能需要继承,也可能不需要。

让我们看下面的示例,以更好地理解它。

class Adder {
Static int add(int a, int b) {
return a + b;
} Static double add(double a, double b) {
return a + b;
} public static void main(String args[]) {
System.out.println(Adder.add(11, 11));
System.out.println(Adder.add(12.3, 12.6));
}
}

方法覆盖:

  • 在“方法重写”中,子类具有与父类相同的名称,名称和类型,参数和返回类型的方法。
  • 方法覆盖是“改变”方法的现有行为。
  • 它是运行时多态性。
  • 这些方法必须具有相同的签名。
  • 它始终需要在“方法覆盖”中进行继承。

让我们看下面的示例,以更好地理解它。

class Car {
void run() {
System.out.println("car is running");
}
} class Audi extends Car {
void run() {
System.out.prinltn("Audi is running safely with 100km");
} public static void main(String args[]) {
Car b = new Audi();
b.run();
}
}

Q9。您可以覆盖Java中的私有或静态方法吗?

您不能在Java中覆盖私有或静态方法。如果您在子类中创建具有相同返回类型和相同方法参数的类似方法,则它将隐藏超类方法;否则,它将隐藏超类方法。这称为方法隐藏。同样,您不能覆盖子类中的私有方法,因为在那里无法访问它。您可以做的是在子类中创建另一个具有相同名称的私有方法。让我们看下面的示例,以更好地理解它。

class Base {
private static void display() {
System.out.println("Static or class method from Base");
} public void print() {
System.out.println("Non-static or instance method from Base");
} class Derived extends Base {
private static void display() {
System.out.println("Static or class method from Derived");
} public void print() {
System.out.println("Non-static or instance method from Derived");
} public class test {
public static void main(String args[]) {
Base obj = new Derived();
obj1.display();
obj1.print();
}
}
}
}

Q10。什么是多重继承?Java支持吗?

如果子类从多个类继承属性,则称为多重继承。Java不允许扩展多个类。

多重继承的问题在于,如果多个父类具有相同的方法名称,则在运行时,编译器将很难从子类中决定执行哪个方法。

因此,Java不支持多重继承。该问题通常称为“钻石问题”。

Q11。 Java中的封装是什么?

封装是一种将数据(变量)和代码(方法)绑定为一个单元的机制。在这里,数据对外界是隐藏的,只能通过当前的类方法进行访问。这有助于保护数据免受任何不必要的修改。我们可以通过以下方式实现Java封装:

  • 将一个类的变量声明为私有。

  • 提供公共的setter和getter方法来修改和查看变量的值。

Q12。什么是关联?

关联是所有对象都有其自己的生命周期且没有所有者的关系。让我们以老师和学生为例。多个学生可以与一个老师联系,一个学生可以与多个老师联系,但是对象之间没有所有权,并且两者都有自己的生命周期。这些关系可以是一对一,一对多,多对一和多对多。

Q13。集合是什么意思?

集合是关联的一种特殊形式,其中所有对象都有其自己的生命周期,但是有所有权,子对象不能属于另一个父对象。让我们以部门和老师为例。一个老师不能属于多个部门,但是如果删除该部门的老师对象,则不会销毁。

Q14。Java中的成分是什么?

组合还是聚集的一种特殊形式,我们可以称其为“死亡”关系。这是强类型的聚合。子对象没有生命周期,如果删除父对象,则所有子对象也将被删除。让我们再次以房屋与房间之间的关系为例。房子可以包含多个房间,没有独立的房间生活空间,任何房间都不能属于两个不同的房子,如果我们删除房子,房间将自动删除。

Q15。什么是接口?

接口可以定义为没有数据成员和成员函数的接口。简单来说,空接口称为标记接口。Java中Marker接口的最常见示例是Serializable,Cloneable等。可以按以下方式声明marker接口。

public interface Serializable{
//do something;
}

Q16 。 Java中的对象克隆是什么?

Java中的对象克隆是创建对象的精确副本的过程。从根本上讲,这意味着可以创建状态与原始对象相似的对象。为此,Java提供了方法clone () 来利用此功能。此方法创建当前对象类的新实例,然后使用与相应字段完全相同的内容初始化其所有字段。要对象clone(),必须实现标记接口java.lang.Cloneable以避免任何运行时异常。您必须注意的一件事是Object clone()是一种受保护的方法,因此您需要重写它。

Q17。Java中的构造函数是什么?

复制构造函数是一个成员函数,用于使用同一类的另一个对象初始化一个对象。尽管在Java中不需要复制构造函数,因为所有对象都是通过引用传递的。而且,Java甚至不支持自动按值传递。

Q18。什么是Java中的构造函数重载?

在Java中,构造函数重载是一种将任意数量的构造函数添加到每个具有不同参数列表的类的技术。编译器使用列表中的参数数量及其类型来区分重载的构造函数。

class Demo {
int i; public Demo(int a) {
i = k;
} public Demo(int a, int b) {
//body
}
}

欢迎关注 Java架构师社区公众号.

本文转载自Java架构师必看 ,更多内容点击查看!

2-Java面试-面向对象的更多相关文章

  1. JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结

    我是一名java开发人员,hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和 ...

  2. 转:最近5年133个Java面试问题列表

    最近5年133个Java面试问题列表 Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来 ...

  3. [Java面试二]Java基础知识精华部分.

    一:java概述(快速浏览): 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒.PDA等的微处理器: 1994年将Oak语言更名 ...

  4. java面试宝典(蓝桥学院)

    Java面试宝典(蓝桥学院) 回答技巧 这套面试题主要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的学生在笔试/面试时更好地赢得好的结果.由于这套试题涉及的范围 ...

  5. JAVA面试精选【Java基础第一部分】

    这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对于那些正打算找工作JAVA软件开发工作的童 ...

  6. Java面试葵花宝典

    面向对象的特征有哪些方面  1. 抽象:抽象就是忽略一个主题中与当前目标2. 无关的那些方面,3. 以便更充分地注意与当前目标4. 有关的方面.抽象并不5. 打算了解全部问题,而6. 只是选择其中的一 ...

  7. java面试和笔试大全 分类: 面试 2015-07-10 22:07 10人阅读 评论(0) 收藏

    2.String是最基本的数据类型吗? 基本数据类型包括byte.int.char.long.float.double.boolean和short. java.lang.String类是final类型 ...

  8. Java面试宝典2013版(超长版)

    一. Java基础部分......................................................................................... ...

  9. 近5年133个Java面试问题列表

    Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来越高级,面试官问的问题也更深入. 在我 ...

  10. java 面试

        115个Java面试题和答案——终极列表(上) 本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力.下面的章节分为上下两篇,第一 ...

随机推荐

  1. 实际项目中遇到EF实体类的操作问题及操作方法

    之前一直做ASP,都是直接写数据库操作语句,但是现在使用linq或者EF了,具体数据库操作不会了,遇到几个问题,然后经过查找资料解决了,记录一下. 一.遇到序列化问题 遇到循环引用问题,我的项目是一个 ...

  2. axure rp extension for chrome怎么用

    1)打开文件(原型图)的resources文件夹>chrome文件夹>将文件axure-chrome-extension.crx拉至谷歌浏览器的扩展程序页面,点击确定添加 2)提示出错时, ...

  3. Class 文件结构及深入字节码指令

    JVM的无关性 与平台无关性是建立在操作系统上,虚拟机厂商提供了许多可以运行在各种不同平台的虚拟机,它们都可以载入和执行字节码,从而实现程序的“一次编写,到处运行” https://www.oracl ...

  4. Life is not the amount of breath you take.

    It's the moments that take you breath away.

  5. Navicat 闲置时间过长会卡死

    前段时间使用navicat连接线上的数据库,Navicat 闲置时间过长会卡死.解决方案:选中数据库,右键点击 编辑连接,修改保持连接间隔为 20秒.非常 so easy ! 1. 选中数据库,右键点 ...

  6. 我是怎样通过个人项目成长为高级 JavaScript 开发者的

    大道理都是能用三两句话说清的 . 在我开发人员的职业生涯中,最好的决定之一就是不再满足于只做工具的使用者. 我决定创建我自己的工具,并不是为了卖钱,而是要了解这些技术的实际工作方式,并提升我的技术技能 ...

  7. [LeetCode]64. 最小路径和(DP)

    题目 给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4 ...

  8. 万字详解 TDengine 2.0 数据复制模块设计

    ​导读:TDengine分布式集群功能已经开源,集群功能中最重要的一个模块是数据复制(replication),现将该模块的设计分享出来,供大家参考.欢迎大家对着设计文档和GitHub上的源代码一起看 ...

  9. mariadb 2

    mariadb第二章-增删改   MariaDB 数据类型 MariaDB数据类型可以分为数字,日期和时间以及字符串值. 使用数据类型的原则:够用就行, 尽量使用范围小的,而不用大的 常用的数据类型 ...

  10. CSAPP 第一章 计算机系统漫游

    第一章 计算机系统漫游 C语言的起源:(系统级编程的首选) C语言与Unix操作系统关系密切 C语言小而简单:其设计由一个人掌控 C语言是为实践目的设计的:其设计用来实现Unix操作系统 C语言程序编 ...