-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBaseClass.java
More file actions
140 lines (114 loc) · 2.89 KB
/
BaseClass.java
File metadata and controls
140 lines (114 loc) · 2.89 KB
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package class_ex;
/**
* Class 和 Object 物件
*
* 訊息是唯一可令物件執行操作的管道, 操作則是唯一可改變物件內部狀態的管道。
* 有了這些限制, 物件內部狀態可說是被妥為封裝了起來 (encapsulation) :
* 無法接觸及, 無法自外界窺伺。
*
*
* TODO: use super().
*
* 你可以抽象化interface, abstract, or concrete class.
*
* References:
* - https://pdai.tech/md/java/basic/java-basic-oop.html
* - https://nwpie.blogspot.com/2017/05/3-class-interface-abstract.html
*/
interface OriginInterface {
// interface class.
static String name = "OriginInterface";
public void printSelf();
public void printHello();
private void printName() {
System.out.println("name: " + name);
}
}
abstract class Origin implements OriginInterface {
// abtstact class.
public void printHello() {
System.out.println("Hello by Origin.");
}
}
class HH extends Origin {
// concorete class.
@Override
public void printSelf() {
System.out.println("HH");
}
// ! HH 的 printHello() 已繼承了 Origin
}
class AA extends Origin {
// concorete class.
@Override
public void printSelf() {
System.out.println("AA");
}
@Override
public void printHello() {
System.out.println("Hello by AA.");
}
}
/**
* 你可以建立新的class去繼承,不改寫父類別原有方法則。
*/
class BB extends AA {
// concorete class.
@Override
public void printSelf() {
System.out.println("BB");
}
// ! BB 的 printHello() 已繼承了 AA
}
/**
* 覆寫(Override)是指子類別繼承父類別時,改寫父類別原有的方法內容
*/
class CC extends AA {
// concorete class.
@Override
public void printSelf() {
System.out.println("CC");
}
@Override
public void printHello() {
System.out.println("Hello by CC.");
}
}
public class BaseClass {
public static void main(String[] args) {
// B b = new B();
// b.printA();
AA a = new AA();
a.printSelf();
a.printHello();
BB b = new BB();
b.printSelf();
b.printHello();
CC c = new CC();
c.printSelf();
c.printHello();
DD d = new DD();
// 注意會擋非 OriginInterface & OriginInterface子類別
// showInfo(d); //! error!!
showInfo(c);
HH h = new HH();
h.printSelf();
h.printHello();
showInfo(h);
}
public static void showInfo(OriginInterface oi) {
// ! 統一開啟一個 function: get printSelf() 值
oi.printSelf();
}
}
/**
* 可使用 final 關鍵字來讓class不允許繼承
*/
final class DD {
public void printSelf() {
System.out.println("DD");
}
}
// ! 會有錯誤,因為 DD 不允許被繼承。
// class EE extends DD {
// }