之前主要了解了面向对象的基本概念,接下来的部分属于面向对象的三大特征:继承、封装、多态
1.继承(extends)
继承让我们更加容易实现类的扩展。子类继承父类,是父类的扩展,实现了代码的重用。
假如我们写一个人类,有姓名和年龄的属性,有吃的功能,
再写一个学生类,有姓名和年龄和学号的属性,有吃的功能,有学的功能
例:
此时代码很复杂,你会发现人类的属性和功能在学生类中都有,写起来比较麻烦,这时就可以用到继承
将学生类中和人类中相同的属性和功能删掉,再写上继承的关键字以及被继承的类名
例:
此时学生类就拥有了人类的所有属性和方法。
注:
1.父类也成为超类,基类,派生类
2.java中类只有单继承,没有c++中的多继承。java中一个儿子只有一个爹,一个爹可以有多个儿子。
3.java中用多接口来实现多继承,接口可以多继承,类只能单继承
4.子类可以得到父类的所有属性和方法(父类构造方法除外),但是不见得可以直接访问(例如:父类的私有属性和私有方法)
5.如果定义一个类没有extends声明父类,那么默认父类为java.lang.Object。
2.instanceof运算符
instanceof是二元运算符,左边是对象,右边是类,当对象是右边类或其子类所创建的对象时,返回true,否则false
例:
3.方法的重写
方法的重写表示子类重写父类的方法
比如,父类有个a()方法,子类使用时候发现不符合自己的要求,就可以进行重写
子类通过重写父类的方法,可以用自身的行为替换父类的行为。
重写三个要点:
1.方法名,形参列表相同
2.返回值类型和声明异常类型相,子类小于等于父类
3.访问权限,子类大于父类
例:
4.super关键字
super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或者属性
super的其他用法
若构造方法的第一行代码没有显示的调用Super(...)或者this(...),那么java默认都会调用super(),含义是调用父类的无参构造函数,这里的super()可以省略
构造方法的第一句总是super(),来调用父类对应的构造方法。
所以构造方法调用流程是,先向上追溯到Object,再依次向下执行类的初始化块和构造方法,直到子类为止。
例:
注:构造方法与静态块执行顺序一致