继承那点事

                                             继承的简单理解


1 继承的理解:

   继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。java语言中,不允许一个类从多个一般类中继承属性和行为,即只支持单继承

哪些可以被子类继承:

   一切对象成员都可以被子类继承,包括私有成员.当子类继承父类后,所有被继承的内容,可以当做自己的代码进行使用


继承的目的:

装的目的在于事物的区分,由此开始继承,目的在于对一类的事物进行再次详细分类,基于此,只有在分类学角度存在意义,才可以应用继承.如果单纯为了代码的复用,不允许使用继承

继承那点事

(父类中应该定义共有性的属性和方法,子类除了可以继承父类中定义的属性和方法外,可以根据自己的具体特点定义自己特有的属性或者方法)

2属性的继承

1、private修饰词,表示成员是私有的,只有自身可以访问;

2、protected,表示受保护权限,体现在继承,即子类可以访问父类受保护成员,同时相同包内的其他类也可以访问protected成员。

3、无修饰词(默认),表示包访问权限(friendly, java语言中是没有friendly这个修饰符的,这样称呼应该是来源于c++ ),同一个包内 可以访问,访问权限是包级访问权限;

4、public修饰词,表示成员是公开的,所有其他类都可以访问;


a:当父子类定义在同一个包中时,父类的所有非私有(private)属性可以被子类继承

b:当父类定义在不同包中时(父类被public 修饰),父类的被public 和protected修饰的属性可以被子类继承

《缺省修饰符修饰的属性不能被其他包中的该类的子类所引用》

继承那点事

3:属性的隐藏

属性的隐藏:子类中出现和父类同名属性的现象称为属性的隐藏。

隐藏是指子类中出现了两个同名的属性变量,一个继承自父类,另一个由子类自己定义,当子类执行继承自父类的操作时处理的是继承自父类的属性,当子类执行自己的定义的方法时,处理的是子类自己重新定义的同名属性。

属性隐藏一般用于父子类中都具有此属性,但在父子类中此属性的取值不相同的情况。

继承那点事

继承那点事


继承那点事

继承那点事

4 方法的继承与覆盖:

 (1)方法的继承权限与属性的继承权限是一致的;

(2)方法的覆盖:子类中定义了和父类中具有相同头方法的现象称为方法的覆盖;

方法覆盖中由于同名方法隶属于不同的类,所以可以通过在方法名前使用不同的对象名或者类名来加以区分调用的是父子类中的方法。

需要注意的是子类在重新定义父类中的已有方法时,应该保持和父类中该方法相同的方法头,即有完全相同的方法名,返回值类型,和参数列表。而访问控制范围至少应该和父类中该方法的访问控制修饰符相同才行

方法的覆盖和属性的隐藏是相互对应的。

注意:《在方法的覆盖中子类同名方法的访问控制修饰符的范围不能小于父类同名方法的访问控制修饰符  eg:

父类的方法为:

protected void printA(){}

子类的中:

 void  printAble(){}

显然是报错的》

继承那点事

继承那点事

继承那点事

继承那点事

  5 继承关系中的构造方法及super关键字

无参数的构造方法:

继承那点事


继承那点事

继承那点事

可见当子类定义了自己的构造方法之后,在创建子类对象时先调用父类的构造方法,再调用子类自己的构造方法

带参数的构造方法:

继承那点事

继承那点事

继承那点事

子类默认只会执行父类的无参数的构造方法,如果希望子类执行父类的带参数的构造方法,需要将子类构造带参数的构造方法:在代码中出现了super。Java系统默认的为每一个类都提供的一个关键字,该关键字代表当前类的直接父类对象,这里使用super表示调用父类的带一个参数的构造方法。

下面我我们来看一下如何使用super关键字调用父类的构造方法,以及如何使用super关键字在子类中调用父类中被隐藏的属性和被覆盖的方法、

Super关键字的使用:

继承那点事

继承那点事

继承那点事

继承关系中构造方法的使用遵循如下规则:

1:子类无条件地调用父类得无参数的构造方法;

2:对于父类的带参数构造方法,子类可以通过在自己的构造方法中使用super关键字来调用,但这条调用语句必须是子类构造方法中的第一条可执行语句

关键字super是java系统默认的为每一个类都提供的一个关键字,该关键字代表当前类的直接父类对象,super的用法有如下三种:

(1)在子类构造方法中可以通过super(实参)调用父类得构造方法,此事要求该语句是子类构造方法的第一条语句,这点和this 调用本类其他构造方法时要求一致。

(2)可以在子类中通过 super.调用属性:调用父类属性,如果此属性不涉及属性隐藏时super.可以省略。

(3)可以在子类中通过super.父类方法调用父类中定义的方法,如果被调方法不属于方法覆盖时super.可以省略

《注意:super与this 不能再static 修饰的方法内使用》

6:final修饰符

final修饰的属性和局部变量

继承那点事

继承那点事

继承那点事

说明final 修饰符修饰的属性与局部变量都不能被重新赋值;

final修饰符又被称为终极修饰符,被final修饰符修饰的数据分为两种情况:

(1)如果被final修饰的数据是基本的数据类型,可以将该数据认为是常量,值不能个能更改

(2)如果被final修饰的数据是其他类型的对象,可以认为是该数据和其所指向的对象之间的绑定关系不能更改,而此数据所指向的对象属性是可以更改的

《值得注意的是:final是唯一一个可修饰属性又可以修饰局部变量的的修饰符》

被final修饰符修饰的方法在子类中不能被覆盖《但是可以被重载》,其中被final修饰的类是不能被继承的

《*******以上属于个人简单的理解与整理,如有不合适还请指出,水平有限还望海涵》