• HIT软件构造课程3.4总结(Object-Oriented Programming )


    上一节学习了ADT理论,这一节学习ADT的具体实现:OOP

    1.基本概念:对象,类,属性,方法

      对象

        对象是状态和行为的捆绑。java中,状态=成员变量,行为=方法。

      

        每个对象都定义了一个类,类定义了成员变量和方法.类的方法就是他的application Programming  interface(API)

        API定义了怎样和实例交互。

      类中的静态和实例变量/方法

        静态方法

          就是类方法,静态方法无法直接调用非静态成员。

        实例方法

          需要引用一个类中变量和方法的实例。

    2.接口和枚举类型    

      接口

        接口中只有方法的定义,没有实现。接口之间可以继承和扩展,一个类可以实现多个接口,一个接口可以有多个实现类。

      java接口和类

        接口:确定ADT规约。类:实现ADT

        也可以不使用接口。实际中更倾向于采用接口来定义变量。

        接口中不能有构造函数。

    4.封装和信息隐藏

      信息隐藏

        API同实现分离,模块间只通过API通讯。

      信息隐藏在接口中

        使用接口类型声明变量,客户端仅适用接口中定义的方法,客户端代码无法直接访问属性。

         成员的可见性修改

        private:仅该类可见。protected:子类可见,同一包可见。default:子类不可见。public :都可见

      信息隐藏的最好练习

        所有成员都应该是私有的。

    5.继承和重写

    (1)可重写的方法与严格继承

        严格继承:子类只能添加新方法,无法重写超类中的方法(超类中方法都是final的)。

        加了final就不可以重写。

       Final

        局部变量:无法重新赋值

        方法:无法重写

        类:无法继承

      重写

        子类使用完全同样的签名。重写的时候,不要改变原方法的本意。

        使用@override

    (2)抽象类

      抽象方法和抽象类

        抽象方法:只有定义没有实现。

        抽象类:抽象类不能实例化

        继承某个抽象类的子类在实例化时,所有父类中的抽象方法必须已经实现。

        子类型实现相同操作,放在父类型里面,子类型无需重写。有细微差别则重写。

    6.多态、子类型、重载

    (1)三种多态

      特殊多态:一个方法可以有多个同名的实现(方法重载)

      参数化多态:一个类型可以代表多个类型(泛型编程)

      子类型多态:一个变量名字可以代表多个类的实例

    (2)特殊多态

      重载

        多个方法具有同样的名字,但有不同的参数列表或返回值类型。方便client调用,client可用不同的参数列表,调用同样的函数。

      重载是静态多态

        根据参数列表进行最佳匹配,静态类型检查,在编译阶段确定要具体执行哪个方法。

        与之相反,重写方法是在运行阶段进行动态检查。

      重载规则

        不同的参数列表,可以在一个类中重载也可以在子类中重载。

      重写和重载

        签名相同为重写,签名不同为重载。子类重载了父类的方法后,子类仍然继承了被重载的方法。

    (3)参数多态性和泛型编程

      

      参数多态性

        参数多态性是指方法针对多种类型时具有同样的行为,此时可用统一的类型表达多种类型。  

        在运行时会根据具体指定类型确定,叫做泛型(generics)

      java中的泛型

        使用泛型变量的三种形式:泛型类、泛型接口和泛型方法。

        类中如果声明了一个或多个泛型变量,则为泛型类。这些类型变量称为类的类型参数

      类型变量

        例子::public interface List <E>

            public class Entry<keytype,valuetype>

      泛型接口

        泛型接口的实现类前面加上@Override即可

       泛型方法

        泛型类/接口,是在实例化类的时候指明泛型的具体类型

        泛型方法,是在调用方法的时候指明泛型的具体类型

    (4)子类型多态性

       一个类只有一个父类,但是可以实现多个接口。

      子类型

        b是a的子类型 即 每个b都是a

      子类型的静态检查

       子类型的规约不能弱化超类型的规约。

      instanceof

        检查一个对象是否为一个类的实例。

      类型转换

        不要向下转换

        不要从一个超类向子类转换。

    10.一些重要的对象方法在java中

      equals 判断两个对象是否相等

      hashCode hash map中的hash码

      toString

      toString()的重写

        @Override public String toString()

    11.设计好类

      不可变类型的优点

        间接性

        固有的线程安全

        可以被任意分享

        不需要防御式拷贝

        优秀的架构板块

      如何写一个不可变的类

        不要提供任何可变类型

        确保没有任何方法被重写

        类都是final  private

        补全 toString ,hashcode,clone,equal

        确保任何可变成分安全

      什么时候让类不可变

        没有其他原因就让类不可变

      什么时候让类可变

        最小化可变性

    12.OOP的历史

      

  • 相关阅读:
    StringUtils工具类的使用
    struts2 文件上传和下载,以及部分源代码解析
    ios开发之猜数字游戏
    从epoll构建muduo-12 多线程入场
    POJ3009 Curling 2.0(DFS)
    IOS-4-面试题1:黑马程序猿IOS面试题大全
    Android-Universal-Image-Loader载入图片
    《UNIX环境高级编程》读书笔记 —— 文件 I/O
    畅通project再续 HDU杭电1875 【Kruscal算法 || Prim】
    轻松学习之Linux教程四 神器vi程序编辑器攻略
  • 原文地址:https://www.cnblogs.com/upuphe/p/12657205.html
Copyright © 2020-2023  润新知