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. HTTPS的简介

    一.什么是HTTPS HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版.现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面. HTTPS主要作用是: (1) ...

  2. java初探(1)之秒杀的业务简单实现

    前言 秒杀的业务场景广泛存在于电商当中,即有一个倒计时的时间限制,当倒计时为0时,秒杀开始,秒杀之后持续很小的一段时间,而且秒杀的商品很少,因此会有大量的顾客进行购买,会产生很大的并发量,从而创造技术 ...

  3. 支付-微信h5

    背景 h5支付分两种 1.浏览器 2.app 浏览器里的h5,最终也会跳转到app. 而app里的h5,本质是公众号.在微信里叫公众号,支付宝叫服务窗. 这里主要讲微信h5. 核心原理 最终目标是下单 ...

  4. Vue 3.0 中令人激动的新功能:Composition API

    正如你所期望的那样,Vue 3带来了很多令人兴奋的新功能.值得庆幸的是,Vue团队主要是在当前API的基础上引入了一些补充和改进,而不是进行重大更改,所以已经了解Vue 2的人应该很快就会对新的语法感 ...

  5. 《闲扯Redis十一》Redis 有序集合对象底层实现

    一.前言 Redis 提供了5种数据类型:String(字符串).Hash(哈希).List(列表).Set(集合).Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要. ...

  6. java-程序流程控制

    判断结构 if(条件){}; if(条件){} else{ }; if(条件){}else{};格式类似3目运算:int a=2,b;b=(a>5)?7:8;这种格式比较简便 if(条件){ } ...

  7. js判断一个字符串中出现次数最多的字符及次数

    最近面试总是刷到这个题,然后第一次的话思路很乱,这个是我个人思路 for循环里两个 if 判断还可以优化 var maxLength = 0; var maxStr = ''; var count = ...

  8. EMQ集群搭建实现高可用和负载均衡(百万级设备连接)

    一.EMQ集群搭建实现高可用和负载均衡 架构服务器规划 服务器IP 部署业务 作用 192.168.81.13 EMQTTD EMQ集群 192.168.81.22 EMQTTD EMQ集群 192. ...

  9. Python3实现zip分卷压缩

    Python实现zip分卷压缩 使用 zipfile 库 查看 官方中文文档 利用 Python 压缩 ZIP 文件,我们第一反应是使用 zipfile 库,然而,它的官方文档中却明确标注" ...

  10. Codeforces1131G Most Dangerous Shark

    Description Original Problem Chinese Translation 大概就是给你一个间隔为1的多米诺序列,推倒一个多米诺骨牌有个花费,求推倒所有多米诺骨牌的最小花费 So ...