forked from jhyscode/Effetive-Java-notes
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSuperCallClass.java
More file actions
55 lines (47 loc) · 1.22 KB
/
SuperCallClass.java
File metadata and controls
55 lines (47 loc) · 1.22 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
package com.github.chapter3;
/**
* 组合和继承,都能实现对类的扩展。
* Created by jhys on 2018/7/21
*/
public class SuperCallClass {
public void call() {
}
public void operator1() {
System.out.println("operator1 in super class");
}
public void operator2() {
System.out.println("operator2 in super class");
}
/**
* 冗余的函数,导致子类臃肿,破坏了封装,增加了出错机会
*/
public void redudant() {
System.out.println("redundant in super class");
}
}
/**
* 组合类的使用
* 综上概述:
组合通常优于继承,
1.考虑使用多态,可以用继承。
2.考虑复用父类方法,而且父类很少改动,可以用继承。
其他情况请慎重使用继承。
*/
class CombineCallClass {
private SuperCallClass superCallClass;
public CombineCallClass() {
superCallClass = new SuperCallClass();
}
public void operator1() {
System.out.println("operate in combine class");
}
/**
* 只需要使用到SuperCallClass中的operate2方法
*/
public void operator2() {
superCallClass.operator2();
}
public void call() {
operator1();
}
}