Thinking in java

75 阅读3分钟
我们可理解“纯粹”的面向对象程序设计方法是什么样的:
(1) 所有东西都是对象。可将对象想象成一种新型变量;它保存着数据,但可要求它对自身进行操作。理论 
上讲,可从要解决的问题身上提出所有概念性的组件,然后在程序中将其表达为一个对象。
(2) 程序是一大堆对象的组合;通过消息传递,各对象知道自己该做些什么。为了向对象发出请求,需向那个
对象“发送一条消息”。更具体地讲,可将消息想象为一个调用请求,它调用的是从属于目标对象的一个子例程
或函数。
(3) 每个对象都有自己的存储空间,可容纳其他对象。或者说,通过封装现有对象,可制作出新型对象。所
以,尽管对象的概念非常简单,但在程序中却可达到任意高的复杂程度。
(4) 每个对象都有一种类型。根据语法,每个对象都是某个“类”的一个“实例”。其中,“类”(Class) 是“类
型”(Type)的同义词。一个类最重要的特征就是“能将什么消息发给它?”。
(5) 同一类所有对象都能接收相同的消息。这实际是别有含义的一种说法,大家不久便能理解。由于类型为 
“圆”(Circle)的一个对象也属于类型为“形状”(Shape)的一个对象,所以一个圆完全能接收形状消息。
这意味着可让程序代码统一指挥“形状”,令其自动控制所有符合“形状”描述的对象,其中自然包括 “圆”。
这一特性称为对象的“可替换性”,是OOP 最重要的概念之一。
Java 采用三个显式(明确)关键字以及一个隐式(暗示)关键字来设置类边界:public,private,
protected 以及暗示性的friendly。若未明确指定其他关键字,则默认为后者。
(1) “public”(公共)意味着后续的定义任何人均可使用。
(2) “private”(私有)意味着除您自己、类型的创建者以及那个类型的内部函数成员,其他任何人都不能
访问后续的定义信息。
(3) “protected”(受保护的)与“private”相似,只是一个继承的类可 访问受保护的成员,但不能访问私有成员。
(4) “friendly”(友好的)涉及“包装”或“封装”(Package)的概念—— 即Java 用来构建库的方法。若某样东
西是“友好的”,意味着它只能在这个包装的范围内使用(所以这一访 问级别有时也叫作“包装访问”)。
Java 语言中,继承是通过 extends 关键字实现的 使用继承时,相当于创建了一个新类。这个新类不仅包
含了现有类型的所有成员(尽管private 成员被隐藏 起来,且不能访问)。
1.多形对象的互换使用
将衍生类的对象当作基础类的一个对象对待。它意味着我们只需编写单一的代码,令其忽略类型的特定细节
,只与基础类打交道。
--父类
public class Shape {
    public void erase(){
        System.out.println("Shape---erase");
    }
}
--子类
public class Circle extends Shape{
    @Override
    public void erase() {
        System.out.println("Circle--erase");
    }
}
--子类
public class Triangle extends Shape{
    @Override
    public void erase() {
        System.out.println("Triangle--erase");
    }
}
--我们将这种把衍生类型当作它的基本类型处理的过程叫作“Upcasting”(上溯造型)。
public class ShapeMain {
    public static void main(String[] args) {
        Circle circle = new Circle();
        eraseAction(circle);
        Triangle triangle = new Triangle();
        eraseAction(triangle);
    }

    private static void eraseAction(Shape shape){
        shape.erase();
    }
}