程序地带

java的多态性



文章目录
一、静态二、多态性三、方法的重写和重载方法的重写(覆盖)方法的重载


一、静态

静态方法可以被继承和重写,静态方法也允许通过对象进行调用


静态方法执行时很有可能并没有构建对象,所以 在静态方法中不允许使用this/super之类用于指定对象的关键字静态方法只能直接访问静态成员,不能直接访问非静态成员

静态块


类在执行时需要通过一个叫作类加载器的组件将程序加载到内存中,类在运行时一般不会发生变化,所以类 不会频繁加载,在整个运行过程中只加载一次,而且常驻内存静态块在类加载完毕后自动执行,而且只执行一次

非静态块 非静态块在类内且在所有的方法之外,非静态块并不会在类加载后自动执行,而是在构建当前对象时自动执行。 new一次则会执行一次,执行时机在构造器之前执行


总结:


当类加载完毕会自动优先处理static属性和static块,这两个优先级是相同的,所以谁在前先处理谁 new对象时,处理非静态属性和非静态块,这两个优先级是相同的,所以谁在前先处理谁后执行构造器

定义一个可变长个数的参数 语法:数据类型… 变量名。-必须作为最后一个参数出现 具体处理过程中实际上是按照数组的方式进行处理,而且数组不会为null


静态导入


在一个类中反复使用到某个类中的静态方法,如果使用静态导入则在当前类中不需要再写类名称,相当于一次性导入该类的所有静态方法

语法:import static java.lang.Math.*; - 导入Math类中的所有静态方法

如果有多个静态导入操作,则所声明的静态方法不能重复,否则报错

注意要求使用JDK1.5+版本,否则编译不通过


基本数据类型的对象缓存


在Integer中包含有一个缓存池,缓存值为-128到127之间IntegerLongShortByte中都有缓存池 ,浮点型没有缓存池是因为无法计数

String中包含一个缓存池,当使用某个字符串对象时会首先在缓存池中进行查找,如果存在则直接返回这个对象的 地址;如果不存在则会在缓存池中进行创建,创建完成后返回地址


二、多态性

多态性是发送消息给某个对象,让该对象自行决定响应何种行为。通过将子类对象引用赋值给超类对象引用变量来 实现动态方法调用


多态可以用三个定义和两个方法来总结。


三个定义分别是:父类定义子类构建、接口定义实现类构建和抽象类定义实 体类构建,两个方法分别是方法重载和方法重写。

静态方法中不能直接访问非静态成员,但是普通方法允许直接调用其他成员方法,当然也允许直接调用静态 方法


多态引用时,构造子类对象时的构造方法的调用顺序


父类 bi=new 子类(); bi可以直接调用父类中声明的方法,但是具体执行的方法取决于new 的是谁。如果需要调用子类中的特殊方法,则必须先进行强制类型转换先调用超类的构造方法,多重超类首先调用远超类的方法然后再执行当前子类的构造方法

多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作


针对一个类对象有两种类型,


一种称之为编译期类型,编译时系统识别对象的类型,”动物 x = new 猫()”在编 译时,系统识别x是动物类别的,所以只能调用动物类定义的方法,而不能调用猫中特殊的方法。另外一种称 之为运行时类型,也就是当程序运行系统识别的类型,new谁就是谁

多态左父右子,声明的类型为父类,实际创建的是子类的对象 当多个方法重载java的原则为:最佳匹配原则


三、方法的重写和重载
方法的重写(覆盖)

编译看左,运行看右


方法的重写(覆盖)一定发生在父子类之间,方法的名称,参数列表均一致,于参数名称无关执行规则:new谁运行谁的方法,和声明的类型无关,由具体创建对象的类型决定子类中方法范围要求大于等于父类中的方法范围,不允许private ;返回类型一致,子类方法可以小于等于父类类型,例如父类Number,子类Integer //参数类型一致
方法的重载

方法的名称相同,参数不同,和返回值类型无关。可以在一个类内或者父子类之间


参数不同有3种情况:参数个数不同、参数类型不同、参数顺序不同 和参数名称无关


调用规则:类型佳匹配原则


多态的优点


消除类型之间的耦合关系可替换性、可扩充性接口性、灵活性、简化性

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/persistence_PSH/article/details/112689110

随机推荐

datepick二格式 化时间_Redis系列-持久化RDB

首先我们先来聊聊什么是持久化,从字面意思可以理解为持有较长时间,通过查询我们可以得知持久化的概念是利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进...

六级苦工 阅读(572)

产品策划的“窘境”

网易邮件事业部·林泉《乔布斯传》中提到,《创新者的窘境》对乔布斯影响很大,故标题套用书名作为噱头。内容也有所相关。这本书的核心要点是优秀的成熟企业如何利用延续性创新保持可观...

网易云信 阅读(554)

vscode 默认初始化_[随笔]vscode的初始化

1.vscode语言环境改为中文[WHY]才发现我的环境一直都是英文,来改一下吧...a.按下快捷键:Windows、Linux快捷键是:ctrl+shift+p  ma...

weixin_39808877 阅读(895)

redis stream持久化_一文掌握Redis持久化

Redis持久化Redis常用作KV缓存,热点数据都在内存、访问速度极快。但谁也不能保证服务的100%可用,意外宕机内存中的数据就没了,对一些数据敏感的业务势...

weixin_39722692 阅读(661)