面向对象基础

本系列为作者读书感悟,部分图片摘抄于书籍《大话设计模式》。

类与实例

对象概念:对象是一个自包含的实体,用一组可识别的特性和行为来标识,一切事物都可以是对象,可以是猪、狗、猫、人、太阳等等。
类的概念:类就是具有相同的属性 和功能的对象的抽象的集合
实例的概念:实例,就是一个真实的对象。比如我们都是’人’,而你和我其实就是’人’类的实例了。而实例化就是创建对象的过程,使用new关键字来创建。
概念理解:假设我们有一个类为Cat
在这里插入图片描述
cat实例化以后就等于出生了一只小猫cat。实例,就是一个真实的对象。比如我们都是’人’,而你和我其实就
是’人’类的实例了。而实例化就是创建对象的过程,使用new关键字来创建。"
而类Cat就相当于模板一样 所有通过这个模板生成的实例 都有相同的属性 和方法。

构造方法

在这里插入图片描述

构造方法:又叫构造函数,其实就是对类进行初始化。构造方法与类同名,无返回值,也不需要void,在new的时候调用。
所有类都有构造方法,如果你不编码则系统默认生成空的构造方法,若你有定义的构造方法,那么默认的构造方法就会失效了,会使用自定义的构造方法。
作用:对类进行初始化,比如我们出生的小猫宝宝 起个名字 小黑 ,在这个类被创建时 、就是调用构造方法的时候了。

方法重载

方法重载:提供了创建同名的多个方法的能力,但这些方法需使用不同的参数类型。注意并不是只有构造方法可以重载,普通方法也是可以重载的。
使用方法重载可以让我们对不同的情况调用不同的方法,比如上述的Cat类 假设我们的小猫出生的时候没有起名字,那是不是就不能实例化了,就上述的代码而言,直接new Cat()是会直接报’Cat方法没有采用0个参数的重载’的错误,因此我们可以使用重载,创建一个无参的构造方法。
在这里插入图片描述
一句话来说方法重载可在不改变原方法的基础上,新增功能

封装

每个对象都包含它能进行操作所需要的所有信息,这个特性称为封装,因此对象不必依赖其他
对象来完成自己的操作。这样方法和属性包装在类中,通过类的实例来实现。
好处:解耦、类内部的实现可以自由地修改、类具有清晰的对外接口。

继承

继承定义了类如何相互关联,共享特性。继承的工作方式是,定义父类和子类,或叫作基类和派生类,其中子类继承父类的
所有特性。子类不但继承了父类的所有特性,还可以定义新的特性。 父子关系可以很好的理解继承这一概念。
缺点:"继承是有缺点的,那就是父类变,则子类不得不变。另外,继承会破坏包装,父类实现细节暴露给子类,这其实是增大了两个类之间的耦合性,因此要在合理环境下使用继承。

多态

多态是一个很抽象的概念,不好理解,具体为什抽象呢,可能是他有关于抽象的定义吧哈哈哈哈。
官方:多态表示不同的对象可以执行相同的动作,但要通过它们自己的实现代码来执行。
也可以理解为一个对象在不同的情境下可以有不同的行为方法
如何解释呢:这里我们先抽个象 现在有一个类 动物Animal类 所有的动物都有 “吃饭” 这个功能 此时我们就给他在Animal类中声明一个吃饭的方法,但是我们不知道是谁在吃饭,因为我们保留记录谁吃饭的标识。要具体谁吃了饭这个方法,可以继承动物这个类,比如新建一个鸡类 那我们就可以使用父类中的方法定义鸡是如何吃饭的了,此时我们使用多态
在这里插入图片描述
即 在某共有属性下不同的子类都可以以继承并且实现父类的某个行为,也都可以以动物的身份自居,因为他们都属于动物这一概念领域。
书中举了个很好理解的例子 动物世界比赛
现在他们开始报名参赛了,如果针对多个种族都设立一个报名器,那将会设置很多个具体的报名点,兔子、狼、猪等等。
而我们将他们按招某公有的属性的定义归类 则可以减少很多冗余代码。
只需要指定类的生物到对应报名点,报上自己的种族,点击报名即可(实现报名方法)。
多多理解这句话 多态表示不同的对象可以执行相同的动作,但要通过它们自己的实现代码来执行

抽象类

接上个概念我们再来观察,你会发现,Animal类其实根本就不可能实例化
的,你想呀,说一只猫长什么样,可以想象,说new Animal();即实例化一个动物。一个动物长什么样?
所以我们完全可以考虑把实例化没有任何意义的父类,改成抽象类,同样地,对于Animal类的getShoutSound方法,其实方法体没有任何意义,所以可以将修饰符改为abstract,使之成为抽象方法。Java允许把类和方法声明为abstract,即抽象类和抽象方法。"
抽象类需要注意几点:
第一,抽象类不能实例化,刚才就说过,'动物’实例化是没有意义的;
第二,抽象方法是必须被子类重写的方法,不重写的话,它的存在又有什么意义呢?其实抽象
方法可以被看成是没有实现体的虚方法;
第三,如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法。

接口

接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦类实现了接口,类就可以支持接口所指定的所有属性和成员。声明接口在语法上与声明抽象类完全相同,但不允许提供接口中任何成员的执行方式。所以接口不能实例化,不能有构造方法和字段;不能有修饰符,比如public、private等;不能声明为虚拟的或静态的等。还有实现接口的类就必要实现接口中的所有方法和属性。
接口可以理解为 某个特定功能的集合或者工具箱 ,他可以暴露多个工具接口以供使用,但不暴露接口细节。

在这里注意 接口可以多实现(有多个技能、功能、组件),但是继承只能是单继承(只能有一个亲爹。)
抽象类和接口的区别
从表象上来说,抽象类可以给出一些成员的实现,接口却不包含成员的实现,抽象类的抽象成员可被子类部分实现,接口的成员需要实现类完全实现,一个类只能继承一个抽象类,但可实现多个接口等
第二,如果行为跨越不同类的对象,可使用接口;对于一些相似的类对象,用继承抽象类。
第三,从设计角度讲,抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类,
而接口是根本不知子类的存在,方法如何实现还不确认,预先定义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kimloner

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值