• 05 继承


    继承与相等测试

    (objectA instanceof Class) 返回 boolean

    对象相等( 堆内存中) aObject.equals(bObject)

    以上两个方法属于 Object 类, 所以所有的类都可以使用.

    反射

    反射库提供了一个非常丰富且精心设计的工具集, 以便编写能够动态操作java代码的程序, 这项功能被大量的应用于javabeans中.

    能够分析类能力的程序被称为反射(reflective)

    java 反射机制是在运行状态中, 对于任意一个类, 都能够知道这个类的所有属性和方法; 对于任意一个对象, 能够调用它的任意一个方法和属性; 这种动态获取信息以及动态调用对象的方法的功能称作 java 反射.

    动态语言定义: 程序运行时, 准许改变程序结构或变量类型, 这种语言称为动态语言.

    在 Object 这个类中有个 getClass() 方法, 可以用来返回当前正在运行的类. 例如:

    Date d = new Date();  

    Class cl = d.getClass();

    String name = cl.getName();  // name is set to "java.util.Date"

    可以利用反射的分析能力, 比如你要对一个对象进行某个操作, 可以先通过这个反射判断当前对象是不是你像要得对象. 而因为反射是在运行时实现的, 是动态的, 所以是最准确的, 如果是普通判断, 很可能因为动态执行时的改变, 而影响了正确的结果.

    java 反射的作用就是增加程序的灵活性, 例如:

    实例化一个 person()对象, 不使用反射 new person(); 如果想变成实例化其他类, 那么必须修改源代码, 并重新编译, 如果使用反射, class.forName("person").newInstance(); 而且这个类的描述可以写到配置文件中, 如 *.xml, 这样就可以实例化其他类了, 只要修改配置文件的"类描述"就可以了, 不需要重新修改编译代码.

    个人感觉: 反射的作用一般, 可以不用考虑.

    继承的设计技巧

    1) 将公共操作和域放在超类( 这里的域只实例变量 )

    2) 不要使用保护的域( 不要使用 protected, 虽然 protected 子类能够直接访问它们, 然后, protected机制并不能带来更好的保护, 其只要原因有两点, 子类集合无限制, 任何一个人都能够由某个类派生一个子类, 并编写代码直接访问 protected实例域, 从而破坏了封装性. 另外, 在同一个包中, 其他所有的类都可以访问protected的实例域, 不管它是否是这个类的子类.

    3) 使用继承实现 "is-a" 关系

    4) 除非所有继承的方法都有意义, 否则不要使用继承. 即父类中存在某个public方法, 对子类来说是没有意义的, 这也同时说明了, 子类和父类不是"is-a" 关系.

    5) 在覆盖(父类方法)时, 不要改变预期的行为.

    6) 使用多态, 而非类型判断( 例如: sharp, 三角形, 正方形, 新增图形 )

    7) 不要过多使用反射(反射可以在运行时检查方法和域, 让人们编写出更具有通用的程序, 这种功能通常适合编写系统程序, 通常不适合应用程序)

  • 相关阅读:
    策略模式(Strategy Pattern)
    责任链模式(Chain of Responsibility Pattern)
    单例模式(Singleton Pattern)
    观察者模式(Observer Pattern)
    iOS常用工具类
    iOS常用的封装方法
    iOS中书写代码规范
    UITableViewCell中的使用cell和cell.contentView的区别
    colorWithAlphaComponent
    iOS 压缩图片
  • 原文地址:https://www.cnblogs.com/moveofgod/p/3774588.html
Copyright © 2020-2023  润新知