JAVA-继承和多态
2022/1/11 1:03:56
本文主要是介绍JAVA-继承和多态,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
什么是继承(extends)
一个类继承另外一个类,该类就可以使用父类的属性和方法
继承的好处
好处:
减少代码,提高开发效率,提供代码复用性
缺点:
增加了类之间的耦合性
只能单继承
开发原则:
高内聚低耦合
继承的特点
1.关键字extends
2.类只能单继承A extends B
称A为子类,B为父类
PS:一般以sub做子类名,sup做父类名
3.支持多层次继承
A extends B,B extends C
A类对象可以使用C类中的属性和方法
4.类如果没有显示继承其他类,默认继承Object
Object 是所有类的超类(superclass)
5.子类只能使用父类非私有的属性和方法
继承的注意事项
单继承
只能调用非私有属性和方法
继承中的成员变量的使用
父类有成员变量,子类没有
子类可以直接使用父类该成员变量(前提:非私有变量)
父类有成员变量.子类有同名成员变量
子类默认使用自己的成员变量
父类没有,子类有成员变量
只能调用自己的成员变量
继承中的成员方法的使用
父类有成员方法,子类没有
子类可以直接使用父类该成员方法(前提:非私有变量)
父类有成员方法,子类有同名成员方法>重写/覆写
子类默认使用自己的成员方法
---
子类有与父类同名的方法.但是还是想使用父类方法执行
可以使用super.方法()调用父类方法
父类没有.子类有成员方法
只能调用自己的成员方法
重写
出现在继承中,子类重写父类的方法
重写的目的
使用父类的方法名,参数列表,但是方法体内部具体不一样,达到适应子类自己的运行场景的情况
重写的特点:
1.子类重写父类方法
子类方法的访问修饰符>=父类的访问修饰符权限
返回值类型与父类的一样
方法名要与父类一样
参数列表(个数,顺序,类型)与父类一样
子类抛出的一次范围<=父类的异常范围
方法体不一样
继承中的构造方法的使用
1.子类不能调用父类构造方法(子类自己的对象也不能调用自己构造方法)
构造方法只能new来调用
2.在任意一个构造方法中第一行隐式存在super()店员父类无参构造
super 和 this
this:代表调用方法的当前对象,this属性,调用子类自己的属性,当自己没有时,也可以调用父类的属性
this.方法()调用子类自己的方法,当自己没有时,也可以调用父类的方法
this()只能调用子类自己的方法
super
代表当前方法的对象的父类对象
super.属性,只能调用父类的属性
super,方法() 只能调用父类的方法
super() 只能调用父类的构造方法
特点:
1.在任意一个构造方法中第一行隐式存在super()调用父类无参构造
2.this和super在构造方法中不能同时出现
是因为:调用构造方法的语句必须在构造方法的第一行
继承和多态
一,继承
面向对象三大特征:封装,继承,多态
java中的继承其实类似于生活中的继承.子类可以使用父类的一些属性和方法.
两个类通过一个关键字extends,体现两个类的继承关系.
A extends B
A 是子类,B是父类
A继承B,A就可以调用B的一些属性和方法
java中是 单继承,一个类只能一个自己父类.
假设一个类必须继承两个类,怎么办?
A继承B,B继承C.
方法的重置:
概念:在同一个类中,两个方法的名字一样,参数列表不一样
方法得到重写
概念:子类中的方法与父类中的方法一致.
如果父类的方法不能满足子类的需求,就需要在子类中重写
重写还有别的用处,例如旧代码已经不能满足新的需求,怎么办?
什么时候使用重写?
1.如果有很多子类,为了统一,可以写一个父类,编写方法,让这些子类继承,同时重写父类的方法即可,如果父类的,某些方法所有子类都可以使用,那么这些方法是不需要重写的
2.上面的黑体字
注意事项
重写要求返回值是一致的,重载对返回值没有要求
public int abc(){
}
public void abc(){
}
在同一个类中是重载
而不是重写,返回值不一样
super:
访问父类的属性和方法,但不能访问私有的
还有一个作用,就是调用父类的构造函数,包括有参和无参的
为什么要调用父类的构造函数?
为了节省代码
注意:
如果调用父类的构造函数,那么父类的构造函数必须在函数体的第一行。
实例化对象的时候肯定是先实例化父类,再实例化子类。
如果父类的构造函数放在后面,那么意味着先实例化子类,后实例化父类。
与上面这句话是违背的。
进入子类的构造函数开始实例化子类,然后先调用super()来实例化父类,并且给父类的属性赋值。然后再回来继续实例化子类,给子类的属性赋值。
当代码全部执行完毕,子类才实例化完毕。
内化
一、 Object
Object默认情况下是所有类的父类。这个类很特殊,我们并没有显示的继承Object,但是它仍然是所有类的父类。
Object 定义了很多方法,这些方法在子类中很多时候都会被重写
拿最常用的equals() 来说。
object 中的equals() 对比的是两个对象的内存地址
二、 String 的equals()
对比的字符串的内容是否一样
我们可以猜测,String的equals是重写了父类的equals方法
首先对比了内存地址
为什么要对比内存地址?
因为两个字符串如果内存地址一样,那么内容一定是一样的。
如果内存地址不一样,则对比内容
怎么对比内容?
把字符串编程 char[]数组,然后遍历数组,进行字符的一个一个的对比。
递归:
自己调用自己叫做递归(一般慎用)
三、 toString()方法
什么时候使用 toString()?
不想打印对象的内存地址,想打印对象中各个属性的值的时候用。
四、 hashCode()
根据对象的一些值(内存地址,属性的值等),作为基数进行运算,最终得到一个固定长度的值。
进行什么运算?
这里调用的是本地的 hashCode()
也就是说调用的是本操作系统的hashCode()方法。
hashCode() 的厉害之处在于,任意长度的数字运算完毕后,得到的结果的长度是固定的。
有什么用?
方便快速定位(查找)对象的位置。
五/转型
转型分为向上转型和向下转型
类似八大基本类型之间的转型
1.向上转型:子类引用,转型成父类引用
映射
2.向下转型:父类引用,转型成子类引用
向上转型的缺点:
向上转型后,只能调用父类中定义的方法,不能调用自己个性化的方法.
当我们需要调用自己个性化的方法时候,就要向下转型.
这么做的目的是不想躺程序出错
六/多态
同一个引用类型,使用不同的实例而执行不同的操作
能不能用一个方法来代替上面所有的cure方法?
多态解决
观察规律,会发现所有cure方法参数共享一个父类
Person / Cat/ Monkey共有父类是Animal.
所以,我可以定义一个方法,参数数Animal
那么这样就可以用一个方法代替以上所有的方法.
这篇关于JAVA-继承和多态的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-08如何用关键链方法突破项目管理瓶颈?
- 2025-01-08电商人必看!6 款提升团队协作与客户满意度软件!
- 2025-01-08电商团队管理混乱?快用这 6 款软件优化协作流程!
- 2025-01-08短剧制作效率低?试试这5款任务管理工具
- 2025-01-08高效应对电商高峰,6 款团队协作软件大揭秘!
- 2025-01-08为什么外贸人都爱上了在线协作工具?
- 2025-01-08提升工作效率,从这些任务管理工具开始
- 2025-01-08新年电商订单暴增,必备的 6 款可视化协作办公软件有哪些?
- 2025-01-08短剧制作经理必备技能与工具全解析
- 2025-01-08在线协作让年货大促轻松应对!