java的多态性

本文详细探讨了Java中的静态特性,包括静态方法、静态块的执行时机,以及静态导入的使用。此外,还阐述了多态性的概念,包括父类与子类之间的方法重写和重载,以及多态调用的规则。文章最后讨论了方法的重写与重载的区别,强调了多态在软件设计中的重要性和优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、静态

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

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

静态块

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

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

总结:

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

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

静态导入

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

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

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

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

基本数据类型的对象缓存

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

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

二、多态性

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

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

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

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

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

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

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

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

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

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

三、方法的重写和重载

方法的重写(覆盖)

编译看左,运行看右

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

方法的重载

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

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

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

多态的优点

  • 消除类型之间的耦合关系
  • 可替换性、可扩充性
  • 接口性、灵活性、简化性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值