1
2
3
4
5
6
7
8
9
10
11
12
13
|
class
A{
public
int
func1(
int
a,
b){
return
a-b;
}
}
class
Client{
static
void
main(String[] args){
A a =
new
A();
System.out.println(
"100-50="
+a.func1(
100
,
50
));
"100-80="
80
));
}
}
|
100-50=50
100-80=20
- 两数相减。
- 两数相加,然后再加100。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class
B
extends
A{
public
int
func1(
int
b){
return
a+b;
}
func2(
b){
func1(a,b)+
100
;
}
}
class
Client{
static
void
main(String[] args){
B b =
new
B();
System.out.println(
"100-50="
+b.func1(
50
));
"100-80="
80
));
"100+20+100="
+b.func2(
20
));
}
}
|
100-50=150
100-80=180
100+20+100=220
里氏替换原则通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。它包含以下4层含义:
- 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
- 子类中可以增加自己特有的方法。
- 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
- 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。