包的作用就是为了分组管理类文件,避免类名冲突
一般在Java源代码中的第一行都要指定当前的包名
-
import
封装的意义
本节重点
继承
生活中的继承
我们先来思考,王者荣耀现在已经发展到60多个英雄了,他们大致分为坦克,战士,刺客,射手,法师,辅助六种角色。因为我喜欢玩射手,下面就拿射手来说明吧。射手相同的特征是射击,但每个射手都有不同的射击状态。
我们找一找射手这类英雄的相同点,相同点都是射击攻击,不同点是射击的方式是不同的,后羿拿弓箭射,鲁班是机枪扫射,狄仁杰是拿令牌扔。
找出这些不同点,如何使用面向对象来解决呢?面向对象的三大特性:封装,继承,多态。很容易想到的是,我们可以设计一个射手的抽象类,里面是一个射手应有的各种方法,比如说普通攻击,技能攻击等等,然后在其子中类继承这种方法,然后使用多态就可以用父类来调用子类方法了。
程序中的继承
继承顾名思义,继任,承接,传承的意思。面向对象的语言有一个好处,就是可以用生活中的
例子来说明面向对象的特性。那么我们先来看看生活中的继承关系有哪些?最常见的:父母子
女;汽车,电动车,自行车和车。无论哪种车,都有具备车的特性。再比如说:家里面的电饭
锅,电磁炉,电冰箱。他们都属于电器类,都具有名字这个属性,也都需要用电这个方法。如
果在程序中我们一个个类去把这些重复的代码都写上去,那不是浪费时间和精力吗?联系之前
的知识,我们能够从一个个对象中抽象出来一个类。那么我们也应该能够从具有包含关系的一
个个类中抽象出一个具有共同属性和方法的类,也就是父类。比如说无论是三角形,矩形还是
圆形,他们都有求边长的方法,那么就可以抽象出一个父类图形类,类中有一个求边长的方
法。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方法中,声明了父类型的引用来指向子类的对象,但是通过父类的引用只能访问父类所定义的成员,不能访问子类所扩展的部分。
欢迎👏点赞+关注,笔芯❤️

标签: