一些java面试题目+_+自我总结之二OOP(面向对象编程)

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

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

2.请分述类和对象的创建模式

  共有五种创建模式:单例模式,工厂方法模式,抽象工厂模式,创造者模式,原型模式,其中工厂方法模式是类创建模式,其余四种是对象创建模式。

  单例模式(Singleton 对象创建模式):单例模式确保其一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。分为懒汉模式和恶汉模式。

  工厂方法模式(Factory Method 类创建模式):核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂的角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。

  抽象工厂模式(对象创建模式):抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。简单来说是创建一组相关或相互依赖的复杂对象。

  建造模式(Builder 对象创建模式):将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式是的产品内部表象可以有独立的变化,用户不必知道产品内部组成的细节。建造模式可以强制事项一种分步骤进行的建造过程。

  原型模式(Prototype 对象创建模式):通过给出一个原型对象来指明所要创建的对象类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态地增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。确定是每一个类都必须配备一个克隆方法。

3.什么时候需要改写hashcode方法?为什么?

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

4.继承和重载的区别?

  1.Java的继承是子类对象继承父类对象的成员属性和成员方法,只允许单继承。

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

  2.方法重载要求是有两个或多个方法名相同,只是方法参数列表不同的方法,它对返回值类型没有限定。

5.abstract class和interface有什么区别(抽象类和接口)?

  从语法上来说:abstract class方法中可以有自己的数据成员,也可以由非abstract的成员方法,并赋予方法的默认行为,而在interface方式中一般不定义成员数据变量,所有的方法都是abstract,方法不能拥有默认的行为。

  从编程上来说:abstract class在Java语言中表示的是一种继承关系,一个类只能用一次继承关系,而一个类可以实现多个interface。

   从问题域上来说:abstract class在Java语言中体现了一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在“”abstract class在Java语言中表示的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在“is a”关系,即父类和派生类在概念本质上是相同的。对于interface来说则不然,并不要求interface的实现者和interface定义在概念本质上是一致的,仅仅实现了interface定义的契约而已。

 6.面向对象的三个特征?简单描述对其理解?

  1)封装:

  2)继承:

  3)多态:

 

 

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