Java多态学习

回顾一下方法重载!!! !

什么时候考虑使用方法重载overload?
当在一个类当中,如果功能相似的话,建议将名字定义的一样,这样代码美观,并且方便编程-
什么条件满足之后能够构成方法重载overload ?
条件一:在同一个类当中
条件二:方法名相同
条件三:参数列表不同(个数、顺序、类型)

方法重写

什么时候我们会考虑使用"方法覆盖"呢?
子类继承父类之后,当继承过来的方法无法满足当前子类的业务需求时,子类有权利对这个方法进行重新编写,有必要进行"方法的覆盖”。
方法覆盖又叫做:方法重写(重新编写),英语单词叫做:override、Overwrite,都可以比较常见的:方法覆盖、方法重写、override

重要结论:

当子类对父类继承过来的方法进行"方法覆盖"之后,
子类对象调用该方法的时候,一定执行覆盖之后的方法。

当我们代码怎么编写的时候,在代码级别上构成了方法覆盖呢?

条件一:两个类必须要有继承关系。

条件二:重写之后的方法和之前的方法具有:
相同的返回值类型、
相同的方法名、
相同的形式参数列表。

条件三:访问权限不能更低,可以更高。(这个先记住。)

条件四:重写之后的方法不能比之前的方法抛出更多的异常,可以更少。(这个先记住。)

这里还有几个注意事项:

注意1:方法覆盖只是针对于方法,和属性无关。注意2:私有方法无法覆盖。
注意3:构造方法不能被继承,所以构造方法也不能被覆盖。
注意4:方法覆盖只是针对于实例方法,静态方法覆盖没有意义.

关于object类中的tostring ()方法

1tostring ()方法的作用是什么?

作用:将"java对象"转换成"字符串的形式"

2、Object类中tostring()方法的默认实现是什么?

public string tostring () {
return getClass ( ). getName() + “@” + Integer.toHexstring (hashCode() ) ;

}
tostring :方法名的意思是转换成string

含义:调用一个java对象的tostring()方法就可以将该java对象转换成字符串的表示

3、关于Object类中toString()方法的覆盖

toString()方法存在的作用就是,将Java对象转换成字符串形式。

大多数的Java类toString()方法都是需要覆盖的。因为Object类中提供的toString()方法输出的是一个Java对象的内存地址。

至于toString()方法具体怎么进行覆盖?

格式可以自定义或者听需求的。(听项目要求的。)

4、方法重载和方法覆盖有什么区别?

方法重载发生在同一个类当中

方法覆盖是发生在具有继承关系的父子类之间

方法重载是一个类中,方法名相同,参数列表不同

方法覆盖是具有继承关系的父子类,并且重写之后的方法必须和之前的方法一致:方法名一致,参数列表一致、返回值类型一致。

多态(重要)

多态的基础语法

1、学习多态基础语法之前,我们需要普及两个概念:
第一个:向上转型

​ 子--------->父(自动类型转换)

第二个:向下转型

​ 父----------->子(强制类型转换,需要加强制类型转换符)

注意:

​ Java中允许向上转型,也允许向下转型。

在工作过程中,和别人聊天的时候,要专业一些,说向上转型和向下转型,不要说自动类型转换也不要说强制类型转换,因为自动类型转换和强制类型转换是使用在基本数据类型方面的,在引用类型转换这里只有向上转型和向下转型。

!!!无论是向上转型。还是向下转型,两种类型之间必须有继承关系,没有继承关系编译器报错

什么时候必须使用向下转型"?

不要随便做强制类型转换。
当你需要访问的是子类对象中"特有"的方法。此时必须进行向下转型。

2、多态指的是:

父类型引用指向子类型对象

包括编译阶段和允许阶段

编译阶段:绑定父类的方法

运行阶段:动态绑定子类型对象的方法

多种形态。+

image-20210801071337668

1、 Animal和cat之间有继承关系吗?有的。

2、Animal是父类,cat是子类。

3.cat is a Animal,这句话能不能说通?能。

4、经过测试得知java中支持这样的一个语法:
父类型的引用允许指向子类型的对象。
Animal a2 = new cat( ) ;
a2就是父类型的引用。
new Cat(是一个子类型的对象。
允许a2这个父类型引用指向子类型的对象-

Animal a2 = new cat() ;
Animal a3 = new Bird () ;

多态在开发中有什么作用?

非常重要:五颗星。。。(多态你会天天用,到处用!!!)

多态在开发中的作用是:

​ 降低程序的耦合度,提高程序的扩展力

public class Master{
    public void feed(Dog d){}
    public void feed(Cat c){}
}

以上代码中表示Master和Dog以及Cat的关系很紧密(耦合度高)。导致扩展力很差。

public class Master{
    public void feed(Pet pet){}
}

以上的代码中表示:Master和Dog以及Cat的关系就脱离了,Master关注的是Pet类。这样Master和Dog以及Cat的耦合度就降低了,提高了软件的扩展性。

面向对象的三大特征:

​ 封装、继承、多态

真的是一环扣一环

有了封装,有了这种整体的概念之后。

对象和对象之间产生了继承。

有了继承之后,才有了方法的覆盖和多态。

这里提到了一个软件开发原则:

​ 七大原则最基本的原则:OCP(对扩展开放,对修改关闭)

​ 目的是:降低程序耦合度,提高程序扩展力。

​ 面向抽象编程,不建议面向具体编程。

有关super关键字内存图

image-20210801171035125

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值