一.继承
继承顾名思义即一方可以把另一方的东西啊传承到自己手里。
例如猫和狗都是动物。动物都有吃饭,喝水等行为,也有年龄,体重的属性。
那么我们在定义猫和狗的时候就没必要去重复写,而是我们可以定义一个动物类,然后猫和狗去继承动物类即可。
即可以实现类与类直接共性的抽取和代码的复用。
理解应该不难,我们直接看语法!
1.继承语法
例如上面就是狗类继承动物类,extends+要去继承的类
2.访问修饰限定符
public和protected修饰的成员可以被子类继承并直接访问,private成员则继承之后不可直接访问。
3.成员变量
子类继承以后,子类如果和父类有重名的成员变量,子类优先用子类自己定义的。
4.super
那如果我们想要使用父类的成员变量(成员方法),怎么办呢?我们可以使用super.a或者super.成员方法或者super()(父类的构造函数)去显示调用。
所以子类初始化的时候也可以先调用super()先去对父类初始化。(默认的无参构造也会有默认super()),但是一旦自己写含参构造就不能用了。
并且super只能有一个而且只能放在第一行!
5.super和this对比
6.final
7.继承方式(Java中不支持多继承)
8.实例化顺序
顺序如下
下面这个题目就是yxyz.
二.多态
接下来我们来了解多态。
接下来我们一个一个来研究!
我们先来说一下
1.向上转型(切片)
上面是一些常见的向上转型的三个时机,也即赋值转型,传参转型,返回值转型。
这个时候父类装子类,那么属于父类的部分就正常切割即可(相当于非父类的部分进行切割(内存中仍然存在,但是不允许用父类进行访问))
2.方法的覆盖重写
可以加@Override的注解,如果没有进行重写,会报警告帮助快速定位错误。
3.父类引用装子类调重写过的方法
animail和Dog都有eat函数,此时父类装子类,调用的就是子类的函数了。
这个过程就叫动态绑定!
object类(万物之父)
object类是所有类的父类
例如tostring的重写或者其他很多功能都是依赖于object类和多态才实现的!
3.向下转型
一般我们只推荐向上转型以后再回复进行向下转型,其他时候除非对此非常了解和保证不会不出错,一般不会推荐这样向下转型,这样非常不安全!