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. 在Notepad++下运行ruby代码

    轻量级,轻量级,所以用notepad++来运行ruby的代码最合适不过了,虽说有更好用的轻量级工具,但是用notepad++习惯了,也懒得去再装其他工具了.好了,进入主题,先安装插件NppExec,打 ...

  2. unity3d android动态更新dll

    基本是参考这篇文章:http://blog.sina.com.cn/s/blog_9e5d42ee0102vvtg.html,进行了增删一波. 大略说一下基本步骤:1.下载mono源码,修改源码,编译 ...

  3. windows-服务器-配置一个及多个-Apache-Tomcat

    问题:如何在一台服务器上发布了几个Tomcat的系统???怎么配置环境变量?怎么设置Tomcat? 2020/8月更新,由于之前的java的环境变量有点绕,此次新加一个流程设计图 一.需求: 一台wi ...

  4. 小花梨判连通 (bfs+思维+map统计数量)

    如果两个集合存储颜色的情况相同,说明这两个在k个图中都是在一个集合的 学到的点:用map,将vector映射一个整数时,只有vector后面的邻接的数据都一样时,才认为两个vector一样 代码: # ...

  5. vue问题整理

    生命周期面试题 1.什么是 vue 生命周期 vue 实例从创建到销毁的过程就是生命周期. 也就是从开始创建.初始化数据.编译模板.挂在 dom -> 渲染.更新 -> 渲染.卸载等一系列 ...

  6. 我竟然才知道slf4j里还有个MDC

    大家好久不见,我是walking.今天给大家带来一个日志方面的知识——MDC,不知道大家认识不,反正我是最近刚知道的 初见MDC 前两天看项目中的代码,无意中看到一个自定义的线程池 MDCThread ...

  7. 大厂运维必备技能:PB级数据仓库性能调优

    摘要:众所周知,数据量大了之后,性能是大家关注的一点,所以我们在业务开发的时候,特别关注性能,做为一个架构师,必须对性能要了解,要懂.才能设计出高性能的业务系统. 一.GaussDB分布式架构 所谓集 ...

  8. 15个随机图片API

    15个随机图片API 妈妈再也不用担心我网站没图用了呜 请不要重复刷新此页面 ! 找了很久的说,你难道不想收藏一下吗 其中有些 API 速度并不太好,可能会拖慢贵站的速度 我也不能保证这些 API 能 ...

  9. Python爬虫学习第一记 (翻译小助手)

    1 # Python爬虫学习第一记 8.24 (代码有点小,请放大看吧) 2 3 #实现有道翻译,模块一: $fanyi.py 4 5 import urllib.request 6 import u ...

  10. oracle之SQL的数据类型

    SQL的数据类型 3.1 四种基本的常用数据类型(表的字段类型) 1.字符型, 2.数值型,3.日期型,4.大对象型 3.1.1 字符型:    char         固定字符,最长2000个   ...