Java_010_面向对象二

代码参考

多态

  • 父类对象指向子类实例

如下例子 Man / Dog /Car 都会跑

  • 如果单独调用自己的 manRun/dogRun/carRun 就很重复和耦合
  • 而使用多态就可以只用一个 objRun 此时只要传递实现类 调用即可

便利性

  • 少写重复代码
  • 功能易于扩展和维护
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
package com.oop.demo.aaa;

public class TestA {
public static void main(String[] args) {

// 不使用多态
Man man1 = new Man();
Dog dog1 = new Dog();
Car car1 = new Car();
System.out.println("不使用多态");
manRun(man1);
dogRun(dog1);
carRun(car1);

System.out.println("使用多态");
Runable man2 = new Man();
Runable dog2 = new Dog();
Runable car2 = new Car();

// 使用多态
objRun(man2);
objRun(dog2);
objRun(car2);


}

public static void objRun(Runable runObj){
runObj.run();
}

public static void manRun(Man man){
man.run();
}
public static void dogRun(Dog dog){
dog.run();
}
public static void carRun(Car car){
car.run();
}
}

interface Runable{
void run();
}

class Man implements Runable{

@Override
public void run() {
System.out.println("两条腿跑");
}
}

class Dog implements Runable{

@Override
public void run() {
System.out.println("四条腿跑");
}
}

class Car implements Runable{
@Override
public void run() {
System.out.println("四个轱辘跑。。。。");
}
}

抽象类(未构建完成的类,残缺的类)

举个例子:抽象类就像一个梦想,但可能要经历几代人来实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
伪代码,开发里肯定用英文
*/
abstract class 东汉末年没落的皇族{
void 招兵买马( );
void 统一天下( );
}
// 刘备由于没统一天下,所以他把重任交给了后代
abstract class 刘备 extends 东汉末年没落的皇族{
void 招兵买马( ){
System.out.println("刘关张桃园结义");
System.out.println("诸葛加入,三分天下");
}
}

// 虽然刘禅没统一,我们暂且假设他成功了吧!不然写不完了
class 刘禅 extends 刘备{
void 统一天下( ){
System.out.println("在梦里!!!终于统一了天下");
}
}

接口

  • 更具体的某种行为/特质
1
2
如上面的 Runable 接口
不是所有事物都会 run的 如盒子/山
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
interface 充电接口{
void 充电( );
}

class 手机 implements Runable{
@Override
public void 充电() {
System.out.println("手机充电");
}
}

class 电脑 implements Runable{
@Override
public void 充电() {
System.out.println("电脑充电");
}
}

接口和抽象类的区别

  • 它们表示的不一样

    • 接口更倾向于某种特性/行为

      1
      2
      3
      4
      充电功能
      安卓手机充电 usb头
      电脑充电 圆头
      air平板充电 type-c头
    • 抽象类是更倾向于某类事物的特性/行为

      1
      2
      3
      4
      5
      动物
      毛发
      行走
      吼叫
      吃饭