JAVA企业面试题精选 OOP 1-10

2.OOP

2.1.什么是OOAD?OOAD怎么实现?

参考答案:

  OOAD(Object Orient Analysis Design,面向对象的分析与设计)是现代软件企业广为采用的一项有效技术。OOAD方法要求在设计中腰映射现实世界中指定问题域中的对象和实体,例如:顾客、汽车和销售人员等。这就需要设计腰尽可能地接近现实世界,即以最自然的方式表述实体。
  使用UML建模语言创建系统的分析模型与设计模型是OOAD实现的主要手段。

2.2.请分述类及对象的创建模式

参考答案:

  总共有五种创建模式,分别是单例模式,工厂方法模式,抽象工厂模式,创造者模式,原型模式,其中工厂方法模式是类创建模式,其余四种是对象创建模式。下面是对各个模式的介绍。
  单例模式(Singleton,对象创建模式):单例模式确保其一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
  工厂方法模式(Factory Method,类创建模式):核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
   抽象工厂模式(Abstract Factory,对象创建模式):抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。简单来说是创建一组相关或相互依赖的复杂对象。
  建造模式(Builder,对象创建模式):将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。
  原型模式(Prototype,对象创建模式):通过给出一个原型对象来指名所要创建的对象类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。

2.3.什么时候需要改写hashCode方法?为什么?

参考答案:

  在改写equals方法的时候总是要改写hashCode方法。如果不这样的话,就会违反Object类的hashCode方法的通用约定,导致这个类无法与所有基于散列值的集合类结合在一起正常工作,包括HashMap,HashSet和Hashtable。

2.4.继承和重载的区别?

参考答案:

  Java的继承是子类对象继承父类对象的成员属性和成员方法,只允许单继承。
  在继承的过程中可以实现方法的重写(也称为覆盖),即子类定义一个方法,覆盖从父类那里继承来的同名的方法。每当字类对象调用该方法时都是子类自己定义的方法,只有使用super关键字或父类名为前缀时,才会调用父类原来的方法。方法覆盖时,子类应与父类有完全相同的方法名,返回值类型和参数列表,子类中的覆盖方法不能使用比父类中被覆盖的方法更严格的访问权限。
  方法重载要求是有两个或多个方法名相同,只是方法参数列表不同的方法,它对返回值类型没有限定。

2.5.请在下表对应的作用域可以访问的位置上打上“√”不能访问的打上“x”

作用域 当前类 同一package 子孙类 其他
Public
Protected
Default
Private

参考答案:

作用域 当前类 同一package 子孙类 其他
Public
Protected x
Default x x
Private x x x

2.6.abstract class和interface有什么区别

参考答案:

  首先,从语法角度来说。abstract class方法中可以有自己的数据成员,也可以有非abstract的成员方法,并赋予方法的默认行为,而在interface方式中一般不定义成员数据变量,所有的方法都是abstract,方法不能拥有默认的行为。
  其次,从编程的角度来说。abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系,而一个类可以实现多个interface。
  最后,从问题域的角度来说。abstract class在Java语言中体现了一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在“is a”关系,即父类和派生类在概念本质上应该是相同的。对于interface来收则不然,并不要求interface的实现者何interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约而已。

2.7.面向对象的3个基本特性

参考答案:

  面向对象的3个基本特征为:封装、继承、多态。

2.8.面向对象的特征有哪些方面?简单描述对这些特征的理解

参考答案:

  面向对象的特征主要有以下几个方面:
  1)抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面:一是抽象的属性,二是抽象的方法。
  2)继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
  3)封装:封装是把过程和数据包围起来,对数据的访问职能通过已定义的洁面。面向对象设计始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的借口访问其他对象。
  4)多态:多态性是指允许不同类的对象对同一消息作出响应,是类的多种表现方式,比如同名不同参。多态性包括参数化多态性和包含多态性,具体表现在重载和重写。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

2.9.一个subclass怎么调用superclass中的方法(myMethod)和构造函数?

参考答案:

  子类subclass实例可以直接调用父类superclass未被重写的方法;若子类重写父类方法,可以在子类内通过”super.方法名()”的形式调用父类方法,例如:super.myMethod();。
  创建子类实例时默认调用父类无参的构造方法,若调用父类有参的构造方法就可以在子类构造方法第一行通过”super(参数)”形式调用。

2.10.构造器Constructor是否可被override?

参考答案:

  构造器Constructior不能被继承,因此不能被重写override,但可以被重载overload。

你可能感兴趣的:(java面试题)