文章目录
写在前面的话
继承是Java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。是很重要的一个知识点。
重写指的是方法的重写,发生在类的继承中。
继承
继承就是子类继承父类的特征和行为,使得子类具有父类的方法和属性。
除了继承,子类还能创建自己的属性和方法。
格式
class 父类{
}
class 子类 extends 父类{
}
继承限制
只有单继承、多重继承、无多继承。
多重继承:A继承B,C又继承A。以此类推。
无多继承:A不能同时继承B和C等多个类。
子类对象的实例化过程
创建对象时:student s = new student();
s保存对象地址存储在栈中,而student()存储在堆中。但在堆中开辟空间创建student()时,是先检查有没有包含父类再创建空间。如果有父类,就先创建父类这个对象,等全部创建完毕后再开辟空间创建student()。与此同时student()里面自动加了一个关键字super(),指向父类的起始地址。
如果父类和子类有属性和方法重复,那会优先加载子类中的。
加入给属性赋值,路径就是先在父类中赋值,再通过super加载给子类。
所以继承的实质,就是子类拥有了父类的地址。
继承了就能拥有父类的所有东西吗?
现在得提到权限修饰符,只有public和protected修饰的,子类才能拥有。
但一般中属性会与自己的get和set方法,即使private了,子类也能通过这些方法调用。
super关键字
super可以做什么?
通过super,可以访问父类构造方法、属性、方法。
子类super()一般是默认访问父类无参构造方法,如果父类没有无参构造方法就会报错。不过可以指定构造方法。
注意的是:调用super构造方法的代码,必须写在子类构造方法第一行。原理和this调用构造方法是一样的。所以super和this不能同时使用,因为总有一个不在第一行。
可以把super看成父类对象的起始地址,一切对super的操作就是对父类里面方法和属性的操作,所以要注意父类中方法和属性的权限修饰符。
父类中private int a; 在子类中super.a 就会报错。
重写
指的是方法的重写,子类的方法和父类方法重复,那么此时就称之为重写,此时生效的为子类的方法;
重写规则
1,参数列表必须与重写方法相同;
2,返回类型必须相同;
3,访问权限不能比父类方法低;
4,父类方法只能被它子类重写;
5,声明为static和private的方法不能被重写;
static跟对象没有关系,它存储在方法区中本身不需要继承。
private修饰的方法权限太低,没法被继承。
重写Override与重载Overload的区别
- 发生位置不同
重载:一个类中
重写:子父类中 - 参数列表限制
重载:必须不同
重写:必须相同 - 返回值类型
重载:与访问权限无关
重写:返回值类型必须一致 - 访问权限
重载:与访问权限无关
重写:子的权限不能小于父的权限 - 异常处理
重载:与异常无关
重写:异常范围可以更小,但不能抛出新的异常