类的概念理解
类是面向对象编程中一个极其重要的核心概念,可以说面向对象编程的一切操作,都是围绕类进行的。
所以想学好面向对象编程,一定要先理解类的概念。
从中文词语上理解类
1.许多相似或相同事物的综合:种~。分~。同~。 2.用于性质或特征相同或相似的事物:分成几~。两~性质的问题。 3.类似:~人猿。~新星。画虎不成反~狗。 4.姓。
上文来自于百度百科中对类的解释,不难得见类是指有相似处的一些物品。
使用该意义的类进行组词,比如:鸟类,鱼类等等,这些词语都是对一个群体的抽象概括。
而在面向对象编程中,这些类可以翻译成Bird类,Fish类,也就是类的名称为Bird,Fish。
大白话来讲就是这么个意思,如果想看更加精准更加科学的解释可以前往百度百科查看。
对象/实例
对象是类中的一个概念,比如人类中有一个名为拜登的人类,那这个拜登,就是人类的一个实例,也就是一个对象。
属性
每个对象都有一个或多个属性,比如上述所提到的拜登实例,他拥有一个“名字”属性,该属性属性值为拜登。
方法
每个对象都可以有一系列的动作,同样拿拜登实例举例,拜登可以当众拉屎,那当众拉屎就是他的一个动作,在Java中称为方法。
1 | public void takeShitInPublic() {} |
类的基本特性
封装
在类的概念清楚之后,其实封装也很好理解。
好比如鸟类,不管是什么鸟,它都有一个名字,所以鸟类下可以有一个属性名为name的属性,在 Java 中表示如下:
1 | class Bird { |
而鸟也有能飞或者不能飞两种,所以需要一个flyAble属性,
1 | class Bird { |
因为申明为private,类中需要向外界提供public的getter,并且需要一个构造方法(构造方法就是当实例化该类的一个对象时调用的方法)
1 | class Bird { |
而如果他能飞,我们需要给他一个飞这个动作的实现,
1 | class Bird { |
而外界代码想要调用Bird类时,都必须先实例化一个Bird类的对象:
1 | class Demo { |
当上述过程完善后,形成了一个较为完整的类。
而外界想要取得Bird类一个对象的name和flyAble的值,或是想要该对象fly时,则只能通过实例化Bird类的对象进行get,而不是直接使用Bird.name获取或是Bird.fly()飞行,防止外部的随意调用产生问题。
继承
先抛开继承这个词不谈,我们接续上文关于类的理解,从这个方向来理解继承。
生物圈里有三个大类,一是动物类,二是微生物类,三是植物类。
而动物类又包含许多种类的动物,如鱼类,鸟类。即鱼类和鸟类都属于动物类。
而在面向对象编程中,我们把这个从属关系,叫做继承关系。
比如在封装中提到的鸟类与鹅,如果我们新建一个鹅类,他需要继承自鸟类。
1 | class Goose extends Bird {} |
此时Goose类就拥有了Bird类有的所有属性和方法,即 name , flyAble , fly()
但是鹅是会游泳的,所以这里我们需要另写一个方法 swim()
1 | class Goose extends Bird { |
此时鹅继承了鸟类,但是也有自己独立的动作。
1 | class Demo { |
同样的,更多解释前往百度百科查看。
抽象
同样的接续鸟类的例子,我们都知道不同鸟之间飞行的动作可能不一样,所以如果都写在鸟类的fly方法中,会导致代码非常臃肿庞大。
此时有一个方法,就是让继承自鸟类的其余类自己去实现不同的方法,这就是抽象,而此时,鸟类就是一个抽象类。
1 | abstract class Bird { |
其中属性、函数等都可以一样写在里面。但是继承的类,必须同样含有这些方法。