JAVA-继承机制学习总结
JAVA-继承机制的总结
JAVA-继承机制学习总结
知识点包括:子类的定义、子类的继承性、使用子类对象(子类对象能访问哪些成员变量,调用哪些方法)
子类的定义
一、子类的定义
首先,要了解子类的定义,得先了解继承是什么:继承是一种由已有的类创建新类的机制。利用继承,可以先定义一个共有属性的一般类,根据该一般类再定义具有特殊属性的子类,子类继承一般类的属性和行为,并根据需要增加它自己的新的属性和行为。
那么,由继承得到的类就被称为子类,被继承的类称为父类(超类)
(注意:java里子类只能有一个父类,一个类可以有多个或零个子类)
在类的声明中,通过使用_关键字extends_来定义一个类的子类:
把Student类定义为People类的子类,People类是Student类的父类(超类)
(若一个类(除了Object类)的声明中没有使用extends关键字,这个类被系统默认为是Object的子类)
子类的继承性
二、子类的继承性
子类继承父类的成员变量(方法)作为自己的成员变量(方法),就像是它们在子类中直接声明(定义)一样,可以被子类中自己定义的任何实例方法操作。
且子类的继承性可以分为两类:
1、子类与父类在同一个包内的继承性
2、子类与父类不在同一个包内继承性
下面分别介绍这两类继承性:
①在同一包内:子类继承父类中不是private的成员变量(方法)作为自己的成员变量(方法),继承的成员变量或方法的访问权限保持不变。
例:Student类(子类)与People类(父类)在同一个包(javawork)内
testS类也在同一个包内
可以看出,子类和父类在同一个包内的时候,子类是可以访问父类的除了private的成员变量(方法)的
②不在同一包内:当子类与父类不在同一包内时,子类只能继承父类的protected和public访问权限的成员变量(方法)
当People类与Student类和testS类不在同一包内时:
那么在Student类里面,如果创建一个对象,那么该对象总是可以通过“.”运算符来访问继承的或自己定义的protected变量和protected方法的
但是,在testS类中,用Student类创建的对象a,是不可以访问Student类从People类继承下来的受保护型的成员变量或方法的。
可以看到,这里是有报错的提示的
但如果我们把testS类与People类放在同一个包内:
可以看到,刚才的报错提示已经消失,但是还是存在一个报错提示。Tellnum是Student类的受保护型的方法。这说明,一旦testS与Student类不在同一个包内后,就不可以访问它的受保护型的成员变量或者方法了。
所以可以总结出来在Other类中用A类创建的一个对象a,该对象通过“.”运算符访问protected成员变量和protected方法的权限如下所述:
1、对于A类自己声明的protected成员变量和方法,只要Other类和A类在同一个包中,a对象就可以访问这些protected成员变量和方法
2、对于子类A从父类继承的protected成员变量或方法,需要追溯到这些protected成员变量或方法所在的“祖先”类,例如可能是D类,则只要Other类和D类在同一个包中,a对象就能访问继承的protected成员变量和方法。
(PS:本文是上学期学习Java时总结的一个学习报告,若有错误欢迎指正)