第四章(2)、面向对象-继承

一、继承

       继承就是抽取多个类相同的成员变量和成员方法放到另一类中,如果某个类的成员也有这些,就直接去继承那个类。java中是通过extends关键字去实现类之间的继承关系,

格式:class 子类名 extends 父类名 {}。父类又可以称为基类或超类,子类也可称为派生类。比如人都有性别、名字、年龄这些属性,有吃饭、睡觉等行为,老师和学生同样也有这些,那么就可以把这些公共的属性和行为抽取出来,放到一个类中,而老师类和学生类就不要再去定义这些成员,只需要去继承这个类就行了,代码如下:

        从以上的代码可以看出,通过继承的方式可以少写许多代码,增加了复用性,这就是继承的好处:1)提高代码的复用性(多个类相同的成员变量和成员方法放到另一类中);2}提高代码的维护性(代码需要修改,修改一处即可),3)类之间产生了联系(多态的前提,但也是一个弊端,提高了耦合性)。前面我们说过程序的封装性,但是这里却没有封装,如果使用了封装,那么子类就不能继承父类中的成员变量了,子类 只能继承父类中所有非私有(private修饰的)成员(成员变量和成员方法),继承也是有弊端的:1)打破了封装性;2)提高了耦合性(开发的原则就是低耦合高内聚,低耦合:降低类和类间的关系;高内聚:提高自身解决事情的能力)。在继承中,类之间的关系是“is a”的关系,继承有一个原则就是不要为了某个或者部分功能去继承。

        java继承中是不支持多继承的,只支持但继承,但有些语言是支持多继承的,格式:class 子类 extends 父类1,父类2,...,父类n,但是java支持多层继承,

格式:class 父类 extends 祖父类    class 子类 extends 父类,这样子类就拥有了父类和祖父类中的非私有(private修饰的)成员,但是构造方法是不能继承的,但是可以通过super关键字去访问父类的构造方法。

二、super关键字

        前面讲述了this关键字本类中的对象引用,那么super代表的是父类的引用,可以通过super关键字去访问父类中的构造方法。其实在创建子类对象的时候,子类中的构造方法都会去访问父类的无参构造方法,就在子类中构造方法中的第一行去访问,只是没有显示出来。this和super是不能一起在构造方法中使用的,因为它们都要放在第一行。通过代码去看看,子类是如何通过super去访问父类的构造方法的。

从结果可以看出,确实是默认访问父类的无参构造方法,如果想访问父类的带参构造方法,就要自己去写出来,代码如下:

        如果父类的成员变量,子类的成员变量和子类的局部变量名都相同,java访问变量的原则是就近原则,要想区分开来,可以使用super和this两个关键字去区分,代码如下:

        从以上结果可以看出,不使用this和super关键字,由于就近原则,访问的都是局部变量,使用了this和super关键字就能区分开来了。

三、方法的重写

        方法重写就是父类和子类中出现了一样的成员方法,就称为方法的重写,也可称为方法覆盖。如果出现的方法重写,那么子类对象去调用这个方法时,实际上就是调用了子类中的,因为父类中的方法也被子类覆盖了。

        

代码如下:

        但是,如果子类既想有自己特有的功能,又能使用父类的功能,这时又可以用到super关键字了。比如:以前的手机没有导航功能,现在的手机是有导航功能,那么现在的手机是既能通话又能导航,代码如下:

注意事项:

1)子类重写父类的方法,访问权限不能低于父类(就是访问修饰符,类别:public > protected > 默认的 > private (权限从大到小),比如父类中的方法是被public修饰的,那么子类重写父类的方法是,权限就不能比父类的小,public权限是最大的,所以子类重写的方法也得被public修饰,权限修饰符后面再一一介绍);

2)父类中私有(被private修饰)的方法是不能被重写的。

四、final关键字

         final字面意思是最终,它可以修饰类、方法、变量,特点:1)修饰类,这个类不能被继承(这个类不能有子类);2)修饰方法,这个方法不能被重写;3)修饰变量,这个变量就变成了常量,它只能被赋值一次,不能被修改(常量:字面值常量,5 "java"等,自定义变量,final int i = 5),代码如下:

        如果父类中有不想被覆盖的方法,就给该方法用final修饰。final可以跟static一起使用,final和static修饰的变量可以在所有类中共享(前提是这个变量的访问权限足够大),并且值不能被修改,方法也可以被final和static修饰。也可以在所有类中共享(前提是访问权限足够大)。

公众号二维码

猜你喜欢

转载自blog.csdn.net/itmzz/article/details/86549521