January Star
  • Home
  • Categories
  • Tags
  • Archives

A Little Java, A Few Patterns: Modern Toys

Contents

  • SeasoningD
  • PointD
  • NumD
  • 第一条建议
  • LayerD

这一章节,作者主要想通过一系列的对话,让你了解到 Java 中基本类型是什么东东(只介绍了 int, boolean 类型)。以及如何使用 Java 自定义类型。


类型是什么?

类型是一类值的集合的命名

SeasoningD

1
2
3
4
5
6
7
8
9
abstract class SeasoningD{} // 调味品 

class Salt extends SeasoningD{} // 盐 

class Pepper extends SeasoningD{} // 胡椒粉 

class Thyme extends SeasoningD{} // 百里香 

class Sage extends SeasoningD{} // 鼠尾草 

上面的代码就定义了 SeasoningD 类型,以其它的四个变体类型。

虽然四个变体类型没有定义 构造函数 ,但是 Java 会自动添加一个默认的构造函数。

PointD

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
abstract class PointD{}

class CartesianPt extends PointD{ // 笛卡尔 
    int x;
    int y;
    CartesianPt(int _x, int _y){
        x = _x;
        y = _y;
    }
}

class ManhattanPt extends PointD{ // 曼哈顿 
    int x;
    int y;
    ManhattanPt(int _x, int _y){
        x = _x;
        y = _y;
    }
}

PointD 的两个变体类型就手动添加了构造函数,因为它们需要有额外的属性传入构造函数。

当使用 new 关键字时, Java 会通过调用类的构造函数来生成其对应的实例。

对抽象类直接使用 new 关键字是不行的,因为抽象类是一个未完全定义的类,无法实例化。

NumD

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
abstract class NumD{}

class Zero extends NumD{}

class OneMoreThan extends NumD{
    NumD predecessor;
    OneMoreThan(NumD _d){
        predecessor = _d;
    }
}

abstract 、 class 、 extends 各代表什么?

abstract 引入了数据类型

class 引入了变体类型

extends 将以上两者联系起来

第一条建议

当你想要明确一类数据时,使用 abstract class XXX {} 来定义数据类型

使用 class XXX extends XXX {} 来定义其变体类型

LayerD

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
abstract class LayerD{}

class Base extends LayerD{
    Object o;
    Base(Object _o){
        o = _o;
    }
}

class Slice extends LayerD{
    LayerD l;
    Slice(LayerD _l){
        l = _l;
    }
}
Comments
comments powered by Disqus

Published

Sep 8, 2014

Category

java

Tags

  • java 13
  • oop 13

Contact

  • Powered by Pelican. Theme: Elegant by Talha Mansoor