继承/super关键字(与this的区别)/方法重写(与方法重载的区别)

前言

提示:这里只有冰冷的知识点,和博主冰冷又绝望的每日感言


一、继承

1.继承的概念

继承概念:就是⼦类继承⽗类的属性和⾏为,使得⼦类对象具有与⽗类相同的属性、相同的⾏
为。⼦类可以直接访问⽗类中的⾮私有的属性和⾏为。

父类:基类
子类:衍生类,拓展类
extends继承关键字
语法结构:子类 extends 父类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.继承注意事项

1.子类继承父类,就继承父类中所有的成员变量和成员方法
2.所有类都拥有默认继承的父类Object
3.一个类只能由一个父类,但是一个父类可以有多个子类继承
4.子类中还可以定义独特的成员变量和成员方法,子类的功能一定大于等于父类
5.子类中的成员变量名和父类中的成员变量同名时,子类名.成员变量名一定是子类中的成员变量(就近原则)
7.子类中可以引用父类对象(实例化父类对象)
8.创建子类对象前会创建父类对象(先调用父类构造方法)(且调用的时无参构造方法)
9.建议不要出现子类父类同名的成员变量名
10.通过子类对象调用方法时,会先看子类中有没有重写父类的方法,如果重写则显示子类中的方法,如果没有,则显示从父类继承的方法。
11.构造方法不能继承,只能super()调用

二、super关键字

2.1 Super:父类对象

1)在子类构造方法中一定会先默认调用父类无参构造方法,默认添加super( );
2)如果父类中没有无参构造方法,就要在子类中手动调用父类的含参构造方法
3)super( );只能出现在构造方法第一行
4)子类想要调用父类无参构造方法,即使子类构造方法删除super( );方法,也可以通过子类无参构造方法调用子类含参构造方法然后子类含参构造方法调用父类无参(含参)构造方法;
5)如果父类中包含有参构造器,却没有无参构造器,则在子类构造器中一定要使用“super(参数)”指定调用父类的有参构造器,不然就会报错。

2.2 Java当中this和super的区别

super:父类对象
this:当前对象

2.2.1 属性的区别:

 (1)this访问本类中的属性,如果本类没有这个属性则访问父类中的属性。
 (2)super访问父类中的属性。 

2.2.2 方法的区别:

 (1)this访问本类中的方法,如果本类没有这个方法则访问父类中的方法。
 (2)super访问父类中的方法。 

2.2.3 构造的区别:

(1)this调用本类构造构造,必须放在构造方法的首行。
(2)super调用父类构造,必须放在子类构造方法首行。 
(3)其他区别:this表示当前对象。super不能表示当前对象 

2.2.4 this. 变量和super.变量

 (1)this.变量:调用的当前对象的变量; 
 (2)super.变量:直接调用的是父类中的变量。 

2.2.5 this(参数)和super(参数)方法

 (1)this(参数):调用(转发)的是当前类中的构造器; 
 (2)super(参数):用于确认要使用父类中的哪一个构造器。

2.2.6 注意点:

 (1)在对拥有父类的子类进行初始化时,父类的构造方法也会执行,且优先于子类的构造函数执行;因为每一个子类的构造函数中的第一行都有一条默认的隐式语句super(); 
 (2)this() 和super()都只能写在构造函数的第一行; 
 (3)this() 和super() 不能存在于同一个构造函数中。
        ①this()和super()都必须写在构造函数的第一行;
        ②this()语句调用的是当前类的另一个构造函数而这个另一个构造函数中必然有一个父类的构造器,再使用super()又调用一次父类的构造器, 就相当于调用了两次父类的构造器,编译器不会通过; 
 (4)this和super不能用于static修饰的变量,方法,代码块;因为this和super都是指的是对象(实例)。

2.3 super内存图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


三、方法重写

3.1方法重写

前提:必须存在父子关系,子类中重写父类定义的方法,⼦类中出现与⽗类⼀模⼀样的⽅法时(返回值类型,⽅法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。

子类访问权限:要大于等于父类访问权限(public > default > private)
	(1)父类的私有方法,可理解为被子类继承,但是不被子类可见,不可访问。
	(2)子类和父类的同名私有方法,为子类自定义方法,不是重写父类的私有方法

返回值类型:
	1)void/基本数据类型要一致
	2)引用数据类型:子类的返回值类型要小于等于父类返回值类型

方法名和方法参数:是否一致

抓取的异常:子类抓取的异常要小于等于父类的异常(子类有抛出异常,父类则一定有抛出异常且大于等于子类异常(父类有子类可以没有),且为已检查异常不是运行时异常),但是RuntimeException不属于已检查异常

在这里插入图片描述

3.2重写应用

在这里插入图片描述
在这里插入图片描述

3.4重写注意事项

1.子类方法覆盖父类方法,必须要保证权限大于等于父类权限
2.子类方法覆盖父类方法,返回值类型,函数名和参数列表都要一模一样
3.在Java继承关系中,如果子类和父类中各有一个static方法,且它们的返回值类型、方法名、参数列表都相同,那么这两个static方法并不具有重写关系。也就是说:static方法不能被重写!同时父类中的private、final方法也是不能被重写的
4.子类的static方法只是将父类的static方法进行了隐藏,而非重写。这两个方法没有关系!父类引用指向子类对象时,只会调用父类的静态方法。所以,这种“重写”行为不具有多态性!

3.5重写与重载之间的区别

方法重载:
	1、同一个类中
	2、方法名相同,参数列表不同(参数顺序、个数、类型)
	3、方法返回值、访问修饰符任意
	4、与方法的参数名无关


方法重写:
	1、有继承关系的子类中
	2、方法名相同,参数列表相同(参数顺序、个数、类型),方法返回值相同
	3、访问修饰符,访问范围需要大于等于父类的访问范围
	4、与方法的参数名无关

总结

继承记牢了,是后面常用的抽象类接口多态都会用到的知识,super一定记住子类方法如果不使用super或者this,则默认调用super()父类构造方法。方法重写不难,就是同名方法重写跟重载的区别也列出来了,给老子记牢了。累了,歇了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值