面向对象三大特性—继承

什么是继承

在现实生活中,经常发生子承父业的事情,同样的,在java中也有类似的“子承父业”的情况。也就是我们今天要说的继承。如果说我们在Java项目中有两个类的功能极其相似或者一个类的功能是在另一个类的基础上实现的。那么我们写两份比较相似代码就极大的浪费了我们的时间和经历。那么我们能不能将相同的部分写进一个项目中,于其相关的项目将这部分代码通过一定的方式拿来使用呢?这完全是可以的,就是继承。

继承有哪些特点

上文中提到了“子承父业"但是我们没有听到过父承子业的吧,除此之外,我们一个人只能有一个亲生父亲吧。同样的,在java中继承也有着同样的特性:单继承,单方向。也就是说一个类只能有一个父类,只能子类继承父类的公共属性和方法,父类不能获得子类的属性和方法。那父类只能有一个子类吗?答案是否定的。父类可以有多个子类(如果只能有一个我们为啥不直接写呢)。

如何实现继承

继承的关键字是 extend 也就是说在类名后接extend接父类类名。完成继承后我们可以得到父类的公共方法和属性(注意:私有的成员变量和方法是不能获得的),代码实例如下

通过上述代码我们可以看到,cat类继承了animal类的属性(leg和tail),在测试中,我们直接调用cat类,成功获得了animal的属性并打印成功。

重写

当我们继承之后,发现父类的方法不能完全满足或与我们想要的功能时,怎么办呢。这时我们就会要用到重写功能。与其字面意思相同,重写就是将父类中已有的方法进行重新书写(更改或完全删掉重写),具体代码示例如下;

我们可以看到在第一个子类中,我们没有改变其原有结构,在下面添加了会西红柿炒蛋的打印语句,第二个子类中我们将super.skill(父类中方法)删掉,我们发现在调用对应的方法时,并没有打印出父类中的方法,也就是说,这个super代表的父类的对象(父类也称为超类),且删除后能够运行。所以当我们要完全重写父类方法时,可以将该句删除。

this、super、this(),super()分别代表什么

到目前为止,我们已经接触到了除this()外的所有关键字,那他们都是什么意思呢?

this:表示当前类对象(成员变量与局部变量重名时,加在类名前可表示当前类对象)

super:表示父类对象,重写时可以直接.方法代表父类方法。

super():表示父类构造方法。(为什么没有继承关系的类创建构造方法时也会有super?因为所有类有一个共同的父类object)

this():表示当前类的构造方法。

重载和从写的区别

在学继承之前我们就已经学过重载,那重载和重写有什么区别呢?

重载:方法名相同,参数不同(参数类型,参数个数,参数顺序)与返回值无关

重写:需要以继承为基础,可以重写父类方法(公共方法),其方法名与参数需与父类完全相同。

猜你喜欢

转载自blog.csdn.net/lwz18642660013/article/details/83420123