<类与对象>

时间:2021-03-06 04:25:03

Overview

  • 封装(encapsulation): 也称为数据隐藏。从形式上看,是将数据与行为组合起来,并对对象的使用者隐藏了数据的实现方式。封装给对象赋予了黑盒特征,提高重用性和可靠性。
  • 继承:扩展已有类来方便的定义一个新的类。子类具有父类的全部属性和方法。

对象

  • 对象的三个特性:
    1. 对象的行为:可以对对象施加的操作
    2. 对象的状态:每个对象都保存着描述当前特征的信息,状态可能会因为方法调用而改变。
    3. 对象标识:唯一标识一个对象的方式(identity)。

Eg

  • 一个破坏封装性的例子
  • class Employee{
    private Date hireDay;
    public Date getHireDay(){
    return hireDay;
    }
    ....
    }

    上面这个例子中,返回的是Date的引用,那么在外层调用Date d = getHireDay();那么对d的改变实际上就是对私有变量hireDay的改变。因此,要返回一个可变对象的引用,应该首先对它进行克隆。

静态域与静态方法

静态常量

  • 比静态变量用的多,比如Math中定义PI, System.out常量
  • public static final double PI = 3.14....;

静态方法

  • 是一种不能对对象实施操作的方法。

工厂方法

  • 静态方法的一种常见用途。
  • eg:NumberFormat类使用工厂方法产生不同风格的对象
  • NumberFormat currencyFormat = NumberFormat.getCurrencyInstance();
    NumberFormat percentFormat = NumberFormat.getPercentInstance();
    double x = 0.1;
    System.out.print(percentFormat.format(x) + " " + currencyFormat.format(x));
  • 这里你可能想问为什么不利用构造器完成这些操作呢?注意原因有两个:
    1. 无法命名构造器。
    2. 当使用构造器时,无法改变所构造的对象类型。

类设计技巧

  • 一定要保证数据私有--> 即绝对不要破坏封装性。
  • 一定要对数据初始化,而不应该依赖系统默认值。
  • 不要在类中使用过多的基本类型,也即用其他的类代替多个相关的基本类型的使用。
  • 将职责过多的类进行分解。
  • 类名和方法名要能够体现他们的职责。