16_JavaSE_继承与多态

1. 继承

继承是指子类继承父类的特征和行为,使得子类实例具有父类的实例域和方法,使得子类具有父类相同的行为。这样的定义看起来好像有点不好理解。没事,我们可以从一个例子入手去理解。

想象一下,假设我们的业务中需要编写一个“猫”类,这个时候我们会给这个类提供一些属性和方法,例如:学名、品种、吃、叫 等等,这样子看起来非常合适,但如果我们的系统后面又需要添加另一个种动物,例如“狗”类,你会发现我们又同样需要编写类似的属性和方法(只是方法的实现过程可能不同而已),久而久之,你会发现,动物的种类实在是太多了,但是他们之间又有很多共同点,这会使得我们的代码非常的冗余。因此我们把这些共同的属性和行为抽离出来一个“动物”类中,各种“猫”、“狗”等类都继承该“动物类”,从而都拥有了这个“动物类”中的属性和方法,也可以增加属于该类的自己的属性和方法,也可以重写父类的方法。(例如“鸟”类需要添加飞行的行为和是否会飞行这个属性等)。

继承的格式:

class 父类 {
}
 
class 子类 extends 父类 {
}

继承需要用到关键字extends,表示该类继承于另一个类,并且在 Java 中,继承只能是:一个子类继承于一个父类,多个子类继承于一个父类,甚至A继承于B,B继承于C这种多重继承;但不可以一个子类继承于多个父类。

继承的特性:
1、子类拥有父类非私有的属性和方法。(正如出现继承的目的,继承就是为了把子类共同的特性抽离出来,因此当然拥父类中的属性和方法,很好理解。)
2、子类可以拥有自己的属性和方法。(子类正因为不同,才分为不同的类,所以自然各有各自特有的属性和方法,也很好理解)。
3、子类可以重写父类的方法。(虽然都拥有父类的方法,但是每个子类的实现细节不同,当然可以重写。)
4、不可多继承。

综上所述:猫和狗都有动物共同的特征和行为(例如有毛色属性和吃饭行为),当然行为细节不同(猫喜欢吃鱼,狗喜欢吃骨头等等);也有属于自己的特征和行为(猫会抓老鼠、狗会啃骨头等等)。

我们前面说到,子类可以拥有父类的属性和方法,也可以重写父类的方法。那么问题来了,我们怎么通过子类的实例化对象去访问父类的属性和方法呢?或者说怎么区分调用的是父类的还是子类的方法呢?这个时候就需要用到了 super 和 this 关键字。this 关键字指定访问的是子类自身的属性和方法,而 super 指定访问父类的属性和方法。一般用于构造方法中,因此以下以构造方法中为例:

this.子类字段名 = 传入字段名;//this.可以省略
super(传入字段名);//传入字段名与父类构造函数中字段名一致。

this.方法名();
super.方法名();

至于 final 关键字:使用该关键字修饰某个类,则这个类不能被继承;修饰某个方法,则该方法不能被重写。

我们前面一致在说重载和重写,重写指的是子类对父类某个方法的重新实现;重载指的是在一个类中,存在两个方法名相同的方法。
重写时:除了方法名一致,参数列表与被重写方法的参数列表要完全相同,返回类型**可以不同,但必须是父类方法返回类型的派生类,**访问权限不能低于父类方法,构造方法不能够重写。
重载时:除了方法名一致,参数列表必须不同(参数个数或参数类型不一样),返回类型可以不一样,访问修饰符可以不一样。

2. 多态

多态指的是同一个行为具有不同的表现形式的能力。例如我们前面提到的,同为“动物”的“猫”和“狗”都会“叫”这个行为,但两者“叫”的方式完全不同。

那么在 Java 实现多态首先当然是要存在继承关系,接着需要子类重写父类的方法,最后要父类的引用指向子类对象Parent p = new Child();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

执章学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值