欢迎光临散文网 会员登陆 & 注册

150天打卡day12_继承的意义

2021-04-20 21:31 作者:关阿姨的Java日记  | 我要投稿

package

  • 包的作用就是为了分组管理类文件,避免类名冲突

  • 一般在Java源代码中的第一行都要指定当前的包名

  • 包名全部小写,采用域名倒置的方式

import

  • 通过 import 来导入完整的类名

  • 快捷键:ctrl+shift+o

封装的意义

  • 是指把对象的属性和行为结合成一个独立的整体,并尽可能的隐藏内部实现的细节

  • 实现封装的步骤

  • 数据私有化(用private实现)

  • 方法公开化(用get()set()方法实现对象属性的赋值,取值操作)

  • 快捷键:Alt+Shift+S

本节重点

继承

生活中的继承

我们先来思考,王者荣耀现在已经发展到60多个英雄了,他们大致分为坦克,战士,刺客,射手,法师,辅助六种角色。因为我喜欢玩射手,下面就拿射手来说明吧。射手相同的特征是射击,但每个射手都有不同的射击状态。

 我们找一找射手这类英雄的相同点,相同点都是射击攻击,不同点是射击的方式是不同的,后羿拿弓箭射,鲁班是机枪扫射,狄仁杰是拿令牌扔。

找出这些不同点,如何使用面向对象来解决呢?面向对象的三大特性:封装,继承,多态。很容易想到的是,我们可以设计一个射手的抽象类,里面是一个射手应有的各种方法,比如说普通攻击,技能攻击等等,然后在其子中类继承这种方法,然后使用多态就可以用父类来调用子类方法了。

程序中的继承

  • 继承是Java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。

  • 继承就是子类继承父类的特征和行为,使得子类具有父类相同的特征和行为。

继承顾名思义,继任,承接,传承的意思。面向对象的语言有一个好处,就是可以用生活中的

例子来说明面向对象的特性。那么我们先来看看生活中的继承关系有哪些?最常见的:父母子

女;汽车,电动车,自行车和车。无论哪种车,都有具备车的特性。再比如说:家里面的电饭

锅,电磁炉,电冰箱。他们都属于电器类,都具有名字这个属性,也都需要用电这个方法。如

果在程序中我们一个个类去把这些重复的代码都写上去,那不是浪费时间和精力吗?联系之前

的知识,我们能够从一个个对象中抽象出来一个类。那么我们也应该能够从具有包含关系的一

个个类中抽象出一个具有共同属性和方法的类,也就是父类。比如说无论是三角形,矩形还是

圆形,他们都有求边长的方法,那么就可以抽象出一个父类图形类,类中有一个求边长的方

法。Java中的继承使用的是extends关键字,继承的类叫做子类(派生类或者超类),被继承

的类叫做父类(或者基类)。凡是这种可以有包含关系的类都能实现继承关系。

 

例如:

兔子和羊属于食草动物类,狮子和豹属于食肉动物类。

食草动物和食肉动物又是属于动物类。

 所以继承需要符合的关系是:is-a,父类更通用,子类更具体


类的继承格式

在Java中使用 extends 来实现类的继承,extends来源于UML类图中,是扩展,泛化的意思,

子类不但可以继承父类的属性和方法,还具有自身的特征,可以做额外的扩展。

 继承的语法:


为什么要使用继承

继承可以实现代码的复用

开发宠物类,其中动物分别为小猫和小狗

  • 后裔:属性(name)方法(射击)

  • 鲁班七号:属性(name)方法(射击)

后裔类

鲁班七号类

从这两段代码可以看出来,代码存在重复,导致后果就是代码量大且臃肿,而且维护性不高

(维护性主要是后期需要修改的时候,就需要修改很多的代码,容易出错)。

 所以要从根本上解决这两段代码的问题,就需要继承,将两段代码中相同的部分提取出来组

成一个父类:

这个Shooter类就可以作为一个父类,然后鲁班七号类和后裔类继承这个类之后,就具有父类

当中的属性和方法,子类就不会存在重复的代码,维护性也提高,代码也更加简洁,提高代码

的复用性(复用性主要是可以多次使用,不用再多次写同样的代码) 继承之后的代码:

 

测试类

 

访问修饰符修饰成员

(1)public: 用public修饰的类、类属变量及方法,包内及包外的任何类(包括子类和普通

类)均可以访问;

 (2)protected: 用protected修饰的类、类属变量及方法,包内的任何类及包外那些继承了

该类的子类才能访问(此处稍后解释protected重点突出继承;

 (3)default: 如果一个类、类属变量及方法没有用任何修饰符(即没有用public、

protected及private中任何一种修饰),则其访问权限为default(默认访问权限)。默

       认访问权限的类、类属变量及方法,包内的任何类(包括继承了此类的子类)都可以访问

它,而对于包外的任何类都不能访问它(包括包外继承了此类的子类)。default重点突出包

 (4)private: 用private修饰的类、类属变量及方法,只有本类可以访问,而包内包外的任

何类均不能访问它。

 

继承的特性

  • 子类拥有父类非private的属性和方法

  • 子类可以对父类的进行扩展

super关键字

super关键字作用

1:主要存在于子类方法中,用于指向子类对象中父类对象。

2:访问父类的属性

public class Pet { //用protected修饰的类、类属变量及方法,包内的任何类及包外那些继承了该类的子类才能访问 protected String name; public Pet(String name) {  super();  this.name = name; } } class Cat extends Pet { public Cat(String name) {    super(name); } @Override public String toString() {    return "Cat [name=" + super.name + "]"; } }

 3:访问父类的函数

 4:访问父类的构造函数

父类:

小猫类:

 

注意

this和super很像,this指向的是当前对象的调用,super指向的是当前调用对象的父类。类加载

完毕,创建对象,父类的构造方法会被调用(默认自动无参),然后执行子类相应构造创建了

一个子类对象,该子类对象还包含了一个父类对象。该父类对象在子类对象内部。this  super

只能在有对象的前提下使用。


父类的引用指向子类的对象

一个子类的对象可以向上造型为父类的类型,就是定义父类型的引用可以指向子类的对象

在main方法中,声明了父类型的引用来指向子类的对象,但是通过父类的引用只能访问父类所定义的成员,不能访问子类所扩展的部分。

 

欢迎👏点赞+关注,笔芯❤️

 


150天打卡day12_继承的意义的评论 (共 条)

分享到微博请遵守国家法律