資料結構

ADTs(Abstract Data Types)

  • 資料與方法的封裝
  • 可重複使用
  • 使用者只可使用public方法
  • 常被稱為資料結構

Interface

  • 描述一個ADTs所 必須 被實作的動作方法(包含傳回值與傳入值)。
  • 可用來 多重繼承
  • 所有的 方法 都是abstract methods
  • 所有的 資料 前輟皆為 static final

實作(implement)

  • 實作Interface時,將implement InterfaceName置於class後
  • 除了實作所有Interface 中方法與資料外,可自行加上其他資料與方法甚至建構子(constructors)

    注意

    • 必須將所有於 Interface中的方法全部實作,否則會出現syntax error
    • 無法宣告Interface,否則將導致syntax error
      ATM anATM = new ATM(); // invalid statement

繼承

  • 前言:人是哺乳類,所以人有哺乳類動物的特徵。以此觀點來看繼承即是,子代擁有父代所有的特徵、行為等,但這些特徵或行為可能保留,抑或是進化成使其更能生存於此環境。
  • 要繼承的class 後加上extends superClassName

this.

  • this. 用於區隔 區域變數class內成員變數

super()

  • 使用父代建構子(constructor)將繼承自父代的資料先行初始化
  • 必須位於子代建構子 第一行
  • 若PM並沒有寫super於建構子第一行,Java 將自動於建構子第一行補上

建構子 (constructor)

  • 如果PM沒有撰寫 無傳入值的建構子(constructor) ,Java會使用預設(default)建構子
  • 如果PM有自行寫過無傳入值的建構子,Java便不使用預設建構子
  • 如果子代含有無傳入值建構子而父代

以下以電腦與筆電為例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
public class D2017_10_11 {
/** Class that represents a computers */
public class Computer {
// Data fields
private String manufacturer;
private String processor;
private double ramSize;
private int diskSize;
private double processorSpeed;

// Methods
// Constructors
public Computer(String man, String processor, double ram, int disk, double procSpeed) {
manufacturer = man;
this.processor = processor;//用於區隔區域變數或成員變數
ramSize = ram;
diskSize = disk;
processorSpeed = procSpeed;
}

public double computePower() {
return ramSize * processorSpeed;
}

public double getRamSize() {
return ramSize;
}

public double getProcessorSpeed() {
return processorSpeed;
}

public int getDiskSize() {
return diskSize;
}

public String toString() {
String result = "Manufacturer: " + manufacturer + "\nCPU: " + processor + "\nRAM: " + ramSize + " megabytes"
+ "\nDisk: " + diskSize + " gigabytes" + "\nProcessor speed: " + processorSpeed + " gigahertz";
return result;
}
}

/** Class that represents a notebook computer **/
public class Notebook extends Computer {
// Date fields
private double screenSize;
private double weight;

// Methods
// Constructors
public Notebook(String man, String processor, double ram, int disk, double procSpeed, double screen,
double wei) {
super(man, processor, ram, disk, procSpeed);
screenSize = screen;
weight = wei;
}

public String toString() {
String result = super.toString() + "\nScreen size: " + screenSize + " inches" + "\nWeight: " + weight
+ " pounds";
return result;

}
}
}