0%

个人关于面向对象的概念理解

类的概念理解

类是面向对象编程中一个极其重要的核心概念,可以说面向对象编程的一切操作,都是围绕类进行的。

所以想学好面向对象编程,一定要先理解类的概念。

从中文词语上理解类

1.许多相似或相同事物的综合:种~。分~。同~。

2.用于性质或特征相同或相似的事物:分成几~。两~性质的问题。

3.类似:~人猿。~新星。画虎不成反~狗。

4.姓。

上文来自于百度百科中对类的解释,不难得见类是指有相似处的一些物品。

使用该意义的类进行组词,比如:鸟类,鱼类等等,这些词语都是对一个群体的抽象概括

而在面向对象编程中,这些类可以翻译成Bird类,Fish类,也就是类的名称为Bird,Fish。

大白话来讲就是这么个意思,如果想看更加精准更加科学的解释可以前往百度百科查看。

对象/实例

对象是类中的一个概念,比如人类中有一个名为拜登的人类,那这个拜登,就是人类的一个实例,也就是一个对象。

属性

每个对象都有一个或多个属性,比如上述所提到的拜登实例,他拥有一个“名字”属性,该属性属性值为拜登。

方法

每个对象都可以有一系列的动作,同样拿拜登实例举例,拜登可以当众拉屎,那当众拉屎就是他的一个动作,在Java中称为方法。

1
public void takeShitInPublic() {}

类的基本特性

封装

在类的概念清楚之后,其实封装也很好理解。

好比如鸟类,不管是什么鸟,它都有一个名字,所以鸟类下可以有一个属性名为name的属性,在 Java 中表示如下:

1
2
3
class Bird {
private String name;
}

而鸟也有能飞或者不能飞两种,所以需要一个flyAble属性,

1
2
3
4
class Bird {
private String name;
private boolean flyAble;
}

因为申明为private,类中需要向外界提供public的getter,并且需要一个构造方法(构造方法就是当实例化该类的一个对象时调用的方法)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Bird {
private String name;
private boolean flyAble;

public String getName() {
return name;
}

public boolean getFlyAble() {
return flyAble;
}

public Bird(String name, boolean flyAble) {
this.name = name;
this.flyAble = flyAble;
}
}

而如果他能飞,我们需要给他一个飞这个动作的实现,

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
class Bird {
private String name;
private boolean flyAble;

public String getName() {
return name;
}

public boolean getFlyAble() {
return flyAble;
}

public Bird(String name, boolean flyAble) {
this.name = name;
this.flyAble = flyAble;
}

public void fly() {
if (flyable) {
System.out.println("起飞!");
} else {
System.out.println("我不能飞!www!");
}
}
}

而外界代码想要调用Bird类时,都必须先实例化一个Bird类的对象:

1
2
3
4
5
6
class Demo {
public static void main(String[] args) {
Bird e = new Bird("鹅", false);
e.fly();
}
}

当上述过程完善后,形成了一个较为完整的类。

而外界想要取得Bird类一个对象的name和flyAble的值,或是想要该对象fly时,则只能通过实例化Bird类的对象进行get,而不是直接使用Bird.name获取或是Bird.fly()飞行,防止外部的随意调用产生问题。

继承

先抛开继承这个词不谈,我们接续上文关于类的理解,从这个方向来理解继承。

生物圈里有三个大类,一是动物类,二是微生物类,三是植物类。

而动物类又包含许多种类的动物,如鱼类,鸟类。即鱼类和鸟类都属于动物类。

而在面向对象编程中,我们把这个从属关系,叫做继承关系

比如在封装中提到的鸟类与鹅,如果我们新建一个鹅类,他需要继承自鸟类。

1
class Goose extends Bird {}

此时Goose类就拥有了Bird类有的所有属性和方法,即 name , flyAble , fly()

但是鹅是会游泳的,所以这里我们需要另写一个方法 swim()

1
2
3
4
5
class Goose extends Bird {
public void swim() {
System.out.println("开始冲浪!(bushi)");
}
}

此时鹅继承了鸟类,但是也有自己独立的动作。

1
2
3
4
5
6
7
class Demo {
public static void main(String[] args) {
Goose goose = new Goose("鹅", false);
goose.fly();
goose.swim();
}
}

同样的,更多解释前往百度百科查看。

抽象

同样的接续鸟类的例子,我们都知道不同鸟之间飞行的动作可能不一样,所以如果都写在鸟类的fly方法中,会导致代码非常臃肿庞大。

此时有一个方法,就是让继承自鸟类的其余类自己去实现不同的方法,这就是抽象,而此时,鸟类就是一个抽象类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
abstract class Bird {
private String name;
private boolean flyAble;

public String getName() {
return name;
}

public boolean getFlyAble() {
return flyAble;
}

public Bird(String name, boolean flyAble) {
this.name = name;
this.flyAble = flyAble;
}
}

其中属性、函数等都可以一样写在里面。但是继承的类,必须同样含有这些方法

原创技术分享,您的支持将鼓励我继续创作.