继承
当两个对象特征和行为完全相同的时候,我们采用类创建不同的对象即可。
但是如果2个对象很相似但是不完全相同,这个时候,我们可以采用继承的方式优化类的定义。
一般相似的两个类,一定会有一个从属关系。
例如:动物类 有性别 能吃饭,能睡觉,能行走。
猫类 有性别 命的条数 能吃饭,能睡觉,能行走,能卖萌
猫 is a 动物,猫是一个动物,但是不能反过来说 动物是个猫。(这里后续会引入介绍向上转型,和向下转型的定义)比较模糊的比较抽象往往是父类,比较具体的往往是子类。
父类也叫超类、基类、superclass。
子类是通过扩展父类延伸(派生)出来的,子类也叫派生类
关于继承:
子类可以在父类的基础上增加新的属性和方法,子类还可以重写(override)父类的方法。
子类能从父类那里继承什么呢?
答:继承了所有非private的属性和方法。
本质上,私有的属性和方法也继承了,只不过不能直接访问。
父类的构造方法是继承不了的!为什么呢?
因为构造方的特点是:方法名必须与类名相同。但是你可以调用父类的构造方法。
调用父类的构造方法使用super(),super(参数列表)
重写
何为重写?为什么要重写?
重写字面意思就是重新写,就像你上学时写作业写错了一句话,然后重新写一样。
当子类的需求,父类无法完全满足或者父类的方法对于子类不够满意,这个时候,你可以对继承过来的方法进行重写,进而满足对于子类的需求,进而对代码进行你想要的实现的效果。
封装
封装: 隐藏内部细节,对外提供访问的接口
* (广义的接口,这里的接口指的是提供访问的方式)。
* 封装包含以下几个维度:
* 1、对属性的封装------setter和getter
* 具体做法,把属性私有化 使用private修饰
* 提供setter和getter方法
* 对属性封装,能确保属性的安全性。不容易出现脏数据
* 2、对行为(方法)的封装
* 对具体功能实现的封装。
* 隐藏实现细节,对外提供调用方式。
* 具体做法,在类中定义一个public修饰方法
* 并且实现功能,使用的时候,通过对象名.方法就完成了功能的调用
* 3、对类的封装
* 把属性和行为封装到类里。
* 使用的时候,创建对象,使用具体的功能。