zoukankan      html  css  js  c++  java
  • 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:使用多个专门的接口比使用单个接口要好,在设计中不要把各种业务类型的东西放到一个接口中造成臃肿。

     

  • 相关阅读:
    翻转数组
    股神
    刮刮卡兑换
    军训队列
    击鼓传花
    上台阶
    @Service空指针异常 -JUNIT测试
    insert 配置信息
    url地址重叠
    shop = mapper.readValue(shopStr, Shop.class); shop=null的问题
  • 原文地址:https://www.cnblogs.com/swifthua/p/7679169.html
Copyright © 2011-2022 走看看