2021-08-27 面向对象高级知识(一)

Java面向对象进阶:继承、覆写与构造原理
本文深入探讨了Java中的继承特性,包括其限制,如不允许多重继承但允许多层继承。讲解了继承时的构造器调用规则以及属性覆写。此外,详细阐述了方法覆写的概念,强调了覆写与重载的区别,并指出覆写方法的访问权限限制。同时,提到了`this`和`super`关键字在类实例化和方法调用中的作用。最后,讨论了在实际开发中如何合理地覆写方法以及抽象类和接口在控制继承时的作用。

面向对象高级知识(一)

重点:继承、抽象类和接口

继承性

继承性是面向对象的第二大主要特性,解决了代码重用问题,利用继承性可以从已有类中派生出新子类,利用子类扩展出更多操作功能

继承性严格来讲是扩充一个类的已有功能

class子类 extends 父类{}

子类被称为派生类

父类被称为超类(super class)

子类即使不扩充父类,也属于维持功能的状态

子类是将父类定义得更加具体化的手段

继承的限制

**限制一:**java不允许多重继承,但是允许多层继承

而c++中有多继承的概念

java不允许

class A{}
class B{}
class C extends A,B{}

但是可以

class A{}
class B extends A{}
class C extends B{}

继承关系不要太多,开发中最多不要超过三层

**限制二:**继承private和public

非私有操作:显示继承

私有操作:隐式继承,继承后还是私有属性

**限制三:**子类构造之前一定会默认调用父类构造(默认无参),保证父类先实例化,再实例化子类

super()

如果父类提供无参构造方法,可写可不写,如果要写一定要写在子类构造方法首行

如果父类没有提供无参构造方法,必须使用super()调用父类指定参数构造方法

super()构造和this()构造不存在冲突

使用this()进行本类构造时,一定会留下一个出口不含this()而不产生循环构造

而在出口处就会调用super()并写在首行

简单java类一定要有无参构造方法

覆写

子类定义了和父类完全以雅阁的方法名称、安徽值类型、参数类型及个数完全相同的方法时,就成为方法的覆写

不同的类进行覆写后,覆写的方法会大不相同,在调用时一定要注意调用过的方法所属类,到底实例化了哪个类

观察实例化类是否被覆写过如果没有被覆写过则调用父类

当发现类的方法名称功能不足(不适合本子类对象操作)时,又必须使用这个方法名称时,使用覆写

被覆写的方法不能有比父类更严格的访问控制权限

public>defult>private

子类覆写只能使用public或者defult

PS:
  1. 当父类使用private声明方法时,子类不能使用public和defult进行覆写,因为这违反了私有原则

  2. 如果父类中的方法调用了一个被覆写的方法,当使用子类的实例化调用该方法是,其中调用的是被覆写的方法

    即遵循所属实例化类的原则\

  3. 如果在子类中使用public覆写一个父类的private方法,该方法符合第二条所述,则相当于重新定义了一个新的方法,而不是覆写

  4. 使用super.方法()相当于直接调用父类指定操作,可以用于子类方法中任何地方

覆写(overwrite)和重载(overload)的区别

发生重载时,参数和返回值类型都可以不同(考虑到开发,要尽量相同),也没有权限要求

覆写的要求更加严格

属性覆写

子类中定义了和父类完全相同的属性名

super.属性会直接调用父类属性

实际开发中没有意义,因为属性会用private声明封装,父类定义的私有属性子类不可见,不会互相影响

this和super的区别

this本类构造本类方法,本类属性 先找本类是否有指定的调用结构,如果没有则调用父类 表示本类当前对象

super子类调用父类构造方法属性 不查找子类,直接调用父类

普通类与类继承是缺少方法覆盖的严格要求的

想要做到对子类覆写方法严格控制,需要依赖抽象类和接口

一般情况下普通类不建议覆写太多方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值