关于抽象类和继承

文章目录
  1. 1. 语法
  2. 2. 实例
    1. 2.1. 抽象类
    2. 2.2. 子类,继承抽象类
  3. 3. 进阶
  4. 4. 总结

抽象类的继承很常见,但是使用不当就会不知所措了

语法

  1. 抽象方法不能有方法主体
1
abstract void xxx();
  1. 抽象类不能被实例化。因为抽象类中方法未具体化,这是一种不完整的类,所以直接实例化也就没有意义了。
  2. 抽象类中不一定要包含abstrace方法。也就是了,抽象中可以没有abstract方法。
  3. 一旦类中包含了abstract方法,那类该类必须声明为abstract类。
  4. 抽象类可以被继承,当继承的父类是抽象类时,需要将抽象类中的所有抽象方法全部实现。

实例

抽象类

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
package com.jihuiweb.model;

import java.io.InputStream;


public abstract class TestParentConfig{

/**
* 获取 App ID
*
* @return App ID
*/
abstract String getAppID();


/**
* 获取 Mch ID
*
* @return Mch ID
*/
abstract String getMchID();


/**
* 获取 API 密钥
*
* @return API密钥
*/
abstract String getKey();


/**
* 获取商户证书内容
*
* @return 商户证书内容
*/
abstract InputStream getCertStream();

/**
* HTTP(S) 连接超时时间,单位毫秒
*
* @return
*/
public int getHttpConnectTimeoutMs() {
return 6*1000;
}

/**
* HTTP(S) 读数据超时时间,单位毫秒
*
* @return
*/
public int getHttpReadTimeoutMs() {
return 8*1000;
}
/**
* 是否自动上报。
* 若要关闭自动上报,子类中实现该函数返回 false 即可。
*
* @return
*/
public boolean shouldAutoReport() {
return true;
}

/**
* 进行健康上报的线程的数量
*
* @return
*/
public int getReportWorkerNum() {
return 6;
}


/**
* 健康上报缓存消息的最大数量。会有线程去独立上报
* 粗略计算:加入一条消息200B,10000消息占用空间 2000 KB,约为2MB,可以接受
*
* @return
*/
public int getReportQueueMaxSize() {
return 10000;
}

/**
* 批量上报,一次最多上报多个数据
*
* @return
*/
public int getReportBatchSize() {
return 10;
}

}

子类,继承抽象类

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
package com.jihuiweb.model;

import java.io.InputStream;


public class TestConfig extends TestParentConfig {


@Override
String getAppID() {
return null;
}

@Override
String getMchID() {
return null;
}

@Override
String getKey() {
return null;
}

@Override
InputStream getCertStream() {
return null;
}
}

进阶

如果父类是 sdk 来的,要从项目种继承它,这种情况,父类默认是[u]protected[/u]类型的,只能在同一个包下才能继承
,尝试改成和 sdk 一样的包名!

总结

[colorr]如果这样写还会出现语法编译不通过的情况,建议你查看下你的包是否有问题、冲突等问题[/colorr]

评论