3.面向对象

面向对象

1.面向对象和面向过程

   面向对象以功能来划分,面向对象可以有更好的可移植性和拓展性

   面向过程以步骤划分问题

 

2.对象和类的关系:类是对对象特征的抽象与归纳,对象是类的实例化,如汽车和BMW(宝马)

 

3.栈和堆:

栈的特点:

   ---线程私有,不能实现线程之间的共享(栈是跟随线程的,有线程就有栈。)

   ---局部变量存入栈中

   ---系统自动分配,内存连续,速度快

堆的特点:

   ---new出来的对象

   ---空间不连续,分配灵活,速度慢

   ---方法区的堆被所有线程共享,用来存放永远不变或唯一内容(堆是跟随 JVM 的,有 JVM 就有堆内存。

 

4.局部变量、成员变量、静态变量

   局部变量:在方法或语句块中声明,必须要手动初始化,从属于方法或语句块

   成员变量:在类中方法外声明,从属于对象

   静态变量:类中方法外声明(用关键字static),从属于类

 

5.构造方法用于对类的成员变量的初始化,构造方法名必须跟类名保持一致,没有返回值,构造方法在对象实例化时被调用(构造方法可以重载)

 

6.this指针在普通方法中指的是当前类,在构造方法中指的是当前类的其他构造方法

 

7.static变量在内存中放置在堆中的方法区,属于静态不变;静态初始化块相比于main先执行

 

8.一个构造方法调用另一个构造方法通过this(参数),必须位于第一句

 

9.package的作用

   ---提供多层命名空间,解决命名冲突

   ---对类按功能分类,使项目组织更加清楚

 

10.import java.util.*;不会影响运行速度,但会影响编译速度。import static 静态导入的作用是导入类的静态属性和方法

 

11.java.util.Date和java.sql.Date怎么区分

   申明引用或者实例化的时候必须全路径

 

12.javadoc注释/** */

 

13.内聚和耦合

   内聚:一个模块内部各个元素彼此结合的紧密程度的度量

   耦合:软件系统结构间相互联系紧密程度的一种度量

 

14.一般属性需要设置为private =>封装数据,通过调用对象方法修改,不让其他人随意修改

 

15.继承的好处

   逻辑关系更清晰,减少代码重复,在使用时,通过父类定义引用,可以组织所有子类

 

16.单继承能避免诸如父类命名重复等错误的发生,java可以通过接口组合来实现多继承

 

17.假如父类有main方法,子类不能继承(main方法是静态方法)

 

18.Java中多态性的实现

 

(1)什么是多态

 

  1. 面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。
  2. 多态的定义指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
  3. 实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
  4. 多态的作用消除类型之间的耦合关系
  5. 现实中,关于多态的例子不胜枚举。比方说按下 F1 键这个动作,如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。

 

(2)多态存在的三个必要条件
  --- 要有继承;
  --- 要有重写;
  --- 父类引用指向子类对象。

 

 (3)多态的好处:

 

  1.可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
  2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。
  3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3 所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,完善或者覆盖这两个接口方法。
  4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。
  5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

 

 

19.java中,final修饰的方法属于静态绑定,其他方法是动态绑定

 

20.final变量是只读的。方法前面加上final关键字,代表这个方法不能被子类的方法重写。使用final修饰的类叫fina类。final类不能被继承

 

21.String类是final类,不能被继承

 

22.*向上转型和向下转型

 

23.抽象类和接口的区别

抽象类:

  1.包含抽象方法的类是一定抽象类,抽象类不一定包含抽象方法。抽象类可以有普通方法,可以定义构造方法。(抽象类不能被new出来,抽象类的构造方法不能被调用)

  2.抽象方法一定是public abstract

  3.抽象类中可以定义一些子类的公共方法,子类只需要增加新的功能,不需要重写已存在的方法。

 接口:

  1.接口中只能定义常量和抽象方法

    2.接口中的常量一定是public static fianl

    3.接口不能定义普通变量,普通方法,不能被new

  4.接口之间可以多继承,一个类可以实现多个接口

 

23(2).接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法?

 

  接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承具体类。抽象类中可以有静态的main方法。

 

 24.作用域public,private,protected,以及不写时的区别
  区别如下:
  作用域           当前类       同一package  子孙类       其他package
  public             √                 √                     √                √
  protected        √                 √                     √                ×
  private            √                 ×                      ×               ×

 

25.OverloadOverride的区别。Overloaded的方法是否可以改变返回值的类型

  方法的重写Overriding和重载Overloading是Java多态性的不同表现。

  重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。

  如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。

  子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。

 

26.构造器Constructor是否可被override

  构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading

 

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

 

28.java中实现多态的机制是什么?
  方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。

 

29.面向对象设计的基本原则 

  面向对象设计原则通常归结为五大类,

 

  第一“单一职责原则SRP:一个设计元素只做一件事,不要随意耦合,多管闲事;

  第二“开放封闭原则OCP:对变更关闭、对扩展开放,提倡基于接口设计,新的需要最好不要去变更已经完成的功能,可以灵活通过接口扩展新功能;

 

  第三“里氏替换原则LSP:子类可以替换父类并且出现在父类能够出现的任何地方,这个也是提倡面向接口编程思想的;

 

  第四“依赖倒置原则DIP:要依赖于抽象,不要依赖于具体,简单的说就是面对抽象编程,不要过于依赖于细节;

 

  第五“接口隔离原则ISP:使用多个专门的接口比使用单个接口要好,在设计中不要把各种业务类型的东西放到一个接口中造成臃肿。

 

原文地址:https://www.cnblogs.com/swifthua/p/7679169.html