Java面向对象-继承(知识点总结)
继承是通过关键字extends实现的
格式:class 子类 extends 父类{}
1.在Java中,被继承的类被称为父类,基类或超类,与之对应的类称为子类或派生类。父类是子类的一般化,子类是父类的特化(具体化)。
2.(Java不支持多继承——即:只能单继承,一个子类只能继承一个父类;但支持多重继承——例如:A类继承B类,B类继承C类,A是B的子类,B是C的子类)
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
3.继承是从已有的类中派生出新的类,新的类能吸收已有类的非private数据的属性和行为,并能扩展新的能力。
优缺点:
优:可以复制原有代码,提高了代码的再利用性和维护性;继承是多态性的前提。
缺:实现了类与类之间的高耦合性,导致子类缺乏独立性,打破了封装性;支持扩展,单身会增强系统结构的复杂度;不支持动态继承,运行时子类无法选择不同的父类;子类不能改变父类的接口。
注意:(该注意引用他人的博客,特标注出来)
java继承中对构造函数是不继承的,只是调用(隐式或显式)。
在创建子类的对象时,Java虚拟机首先执行父类的构造方法,然后再执行子类的构造方法。在多级继承的情况下,将从继承树的最上层的父类开始,依次执行各个类的构造方法,这可以保证子类对象从所有直接或间接父类中继承的实例变量都被正确地初始化。
原文链接
————————————————
版权声明:本文为CSDN博主「别怕别怕」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43351473/article/details/104324431
关键字
extends关键字
在Java中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以extends只能继承一个类。
Implements关键字
使用implements关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。
super与this关键字
super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
注:
1.只能在构造方法或实例方法内使用super关键字,而在静态方法和静态代码块内不能使用super关键字
2.如果父类中的成员变量和方法被定义为private类型,那么子类无法访问。
this关键字:指向自己的引用,表示当前正在调用此方法的对象引用。
final关键字
声明类时可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写。
最终变量:常量—不可修改
最终方法:不允许被重写
最终类:不允许被继承,例如Sring。
方法重载(overload)
方法的重载描述的是一种现象,假设现在存在一个方法,现在我又新建了另外一个方法,该方法我们称为新方法,我们让新方法方法名与原方法相同,而形式参数列表与原方法不同。这就叫做方法的重载。
重载的规则(引用自甜加冰.com):
(1)方法名字相同
(2)被重载的方法必须形参列表不一样(参数个数或类型不一样);
(3)被重载的方法可以改变返回类型;
(4)被重载的方法可以改变访问修饰符;
(5)返回值类型不能作为重载函数的区分标准。
(6)被重载的方法可以声明新的或更广的检查异常;
(7)方法能够在同一个类中或者在一个子类中被重载。
方法重写(override)
子类定义一个与父类方法的方法签名以及返回值类型完全相同的方法就叫做重写,也可称为覆写。
重写父类方法时,方法的访问修饰符只能大于或等于父类方法的访问修饰符
重写的规则(引用自甜加冰.com):
(1)参数列表必须完全与被重写方法的相同;
(2)返回类型必须完全与被重写方法的返回类型相同;
(3)访问权限不能比父类中被重写的方法的访问权限更低。(例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected)
(4)父类的成员只能被它的子类重写;
(5)声明为final的方法不能被重写;
(6)声明为static的方法不能被重写,但是能够被再次声明;
(7)子类和父类在同一个包中,那么子类可以重写父类所有出了声明为private和final的方法;
(8)子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法;
(9)重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
(10)构造方法不能被重写;
(11)如果不能继承一个方法,则不能重写这个方法;
重写与重载之间的区别
方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overload);方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Override);方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。
访问修饰符
private:只允许在本类中进行访问(访问权限最小的)。
public:允许在任意位置访问(访问权限最大的)。
protected:允许在当前类、同包子类/非子类、跨包子类调用:跨包非子类不允许。
default:允许在当前类,同包子类/非子类调用;跨包子类/非子类不允许调用。
在构造子类对象时,父类的构造方法一定会被调用,先被执行。
构造子类对象(调用顺序)
当父类和子类中都定义了初始化器
父类的静态初始化器—子类的静态初始化器—父类的初始化器—父类的构造方法—子类的初始化器—子类的构造方法(从左至右)
———(一个小菜鸡,学的不咋好,只为完成老师布置的作业,如发现哪里有误,可以提出,我会修改的,请各位大佬多多指教,谢谢)