JAVA继承的使用

本文详细介绍了Java中的继承机制,包括基本概念、使用extends关键字实现继承、Object类的作用、方法重写规则、super关键字的使用以及构造方法在继承关系中的调用。
摘要由CSDN通过智能技术生成

1.继承

1.继承的基本概念

  • 继承是面向对象的三大特性之一,继承可以解决编程中代码冗余的问题,是实现代码重要手段之一。继承是软件可重用性的一种表现,使子类具有和父类相同的特征和行为,从而缩短开发周期。此时新类被称为子类,现有的类被称为父类。java语言通过extends关键字实现类之间的继承关系。继承最基本的作用就是使代码可重用,增加软件的可扩展性。
  • 继承表达的是"xx is a xx" 的关系,如Dog is a Pet。同样,可以让“教师”继承“人”,让“”西瓜继承”水果“,让”小轿车”继承"车"等。

语法

[访问修饰符] class <SubClass> extends <SuperClass> {

}

其中,SubClass被称为子类或派生类,SuperClass被称为父类或基类。在java中,继承的规则如下。

  • 可以继承父类中public和protected修饰的属性和方法,不论子类和父是否在同一个包中。
  • 可以继承默认访问修饰符的属性和方法,但是子类和父类必须在同一个包中。
  • 无法继承private修饰的属性和方法。
  • 无法继承父类的构造方法。

 2.Object类

事实上,所有的java类都直接或间接地继承Object类,它位于java.lang包中。Object类是所有java类的“祖先”。在定义一个类时,没有使用exztends关键字,也就是没有显示地继承某个类,那么这个类直接继承Object类。所有对象都继承Object类的方法。

Object类的常用方法表如下

Object类中的equals() 方法用来比较两个对象是否是同一对象,若是,则返回true,而字符串对象的 equls()方法用来比较两个字符串的值是否相等 java.lang.String类重写了Object类中的equals()方法那么,什么是重写呢?

3.继承关系中的方法重写

子类通过继承可以拥有和父类相同的特征和行为,另外,子类也可以根据需要,定义自己特有的行为,即沿袭了父类的方法名称,又重新实现了父类方法,这就是方法重写。

1.方法重写

在子类中可以根据需求对父类继承的方法重新编写,这被称为方法重写或方法覆盖,方法重写必须遵守以下规则。

  • 重写方法和被重写方法必须具有相同的方法名。
  • 重写方法和被重写方法必须具有相同的参数列表。
  • 重写方法和返回值类型必须和被重写方法的返回值类型相同是其子类。
  • 重写方法不能缩小被重写方法的访问权限。

另外,IntelliJ IDEA工具提供了便捷的方式来实现对父类的重写操作。

  1. 右击AppleTree类代码,在打开的列表中选择“Generate” 选项
  2. 选择"Override Methods"选项
  3. 这里列出了所有允许在AppleTree类中进行重写的父类方法,包括顶级父类Object类中定义的方法。选择重写Crop类的print()方法,默认勾选"Insert@Override"复选框,单击OK按钮。在AppleTree类中自动生成print()方法框架。

2.super关键字 

  • 如果想在子类中调用父类的被重写的方法,应该如何实现呢?例如我们可以用"super.print()"语句,可以在子类方法中通过"super.方法名"实现。 
  • super关键字代表对当前对象的直接父类对象的默认引用。在子类中可以通过super关键字访问父类的成员,包括父类的属性和方法。具体语法如下:

语法 

访问父类构造方法:super(参数)

访问父类属性/方法:super.<父类属性/方法>

3.使用super需要注意以下几点 

  • super关键字必须出现在子类(子类的方法和构造方法)中,而不允许在其他位置。
  • 可以访问父类的成员,如父类的属性、方法、构造方法。
  • 注意访问父类的成员,如无法通过super关键字访问private成员。 

 4.继承关系中的构造方法

  1. 在java中,一个类的构造方法在如下两种情况下总会被执行。
  • 创建该类的对象(实例化)。
  • 创建该类的子类的对象(子类的实例化)。

因此,子类在实例化时,会首先执行其父类的构造方法,然后才会执行子类的构造方法。换言之,在java语言中,当创建一个对象时,java虚似机会按照父类一子类的顺序执行一系列的构造方法。子类继承父类时构造方法的调用规则如下。

  • 如果在类的构造方法中没有通过super关键字显式调用父类的带参构造方法,也没有通过this关键字显示调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法,在这种情况下,是否写"super();"语句,效果是一样的。
  • 如果在子类的构造方法中通过super关键字显式 地调用了父类的带参构造方法,那么将执行父类相应的构造方法,而不执行父类无参构造方法。
  • 如果在子类的构造方法中通过this关键字显式地调用了自身的其他构造方法,那么在相应构造方法中遵循以上两条规则。
  • 如果存在多级继承关系,则在创建一个子类对象时,以上规则会多次向更高一级父类应用,直到执行顶级父类Object类的无参构造方法为止。
  • 如果类存在多级继承关系,则在创建一个子类对象时,构造方法的调用规则会多次向更高一级父类传递,一直到执行顶级父类Object类的无参构造方法为止。
  • 子类的构造方法默认调用父类无参构造方法,在这种情况下,无论是否使用super()语句,执行结果都相同。
  • 如果子类构造方法通过super关键字显式调用父类带参构造方法,则将执行父类带参构造方法不再执行父类无参构造方法。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值