第23节 Java子类的继承性
子类与继承
利用继承,可以先编写一个共有属性的一般类,根据该一般类再编写具有特殊属性的新类,新类继承一般类的状态和行为,并根据需要增加它自己的新的状态和行为。
由继承而得到的类称为子类,被继承的类称为父类(超类)。
声明一个类的子类的格式如下:
class 子类名 extends 父类名 {
… …
}
例如:
class Student extends People {
… …
}
子类的继承性
所谓子类继承父类的成员变量作为自己的一个成员变量,就好象它们是在子类中直接声明一样,可以被子类中自己定义的任何实例方法操作。
所谓子类继承父类的方法作为子类中的一个方法,就象它们是在子类中直接定义了一样,可以被子类中自己定义的任何实例方法调用。
示例
建立如下包和类
如果man和woman想要继承person这个类
1)子类与父类在同一包中的继承性
如果子类和父类在同一个包中,那么,子类自然地继承了其父类中不是private的成员变量作为自己的成员变量,并且也自然地继承了父类中不是private的方法作为自己的方法,继承的成员变量或方法的访问权限保持不变。
Person.java定义了一个speak方法 如图
在man和woman类就都可以调用这个speak方法
将person类,改为private man中直接报错
重新书写并没有speak方法,改为private后已经没有权利继承它了
2)子类与父类不在同一包中的继承性
如果子类和父类不在同一个包中,那么,子类继承了父类的protected、public成员变量做为子类的成员变量,并且继承了父类的protected、public方法为子类的方法,继承的成员或方法的访问权限保持不变。
示例:
新建如下包和类
在person中默认的友好的方式,发现tom不能访问
3)关于instanceof运算符
instanceof运算符是Java独有的运算符号。
instanceof是双目运算符,其左面的操作元是对象,右面的操作元是类,当左面的操作元是右面的类或子类所创建的对象时,instanceof运算的结果是true,否则是false。
示例:Person.java
package com.blue.main;
import com.blue.test.Tom;
public class Person {
public void speak(){
Tom tom = new Tom();
if(tom instanceof Tom){
System.out.println("yes");
}
if(tom instanceof Person){
System.out.println("yes");
}
}
}
创建一个Demo21主类
package com.blue.main;
public class Demo21 {
public static void main(String[] args) {
Person person = new Person();
person.speak();
}
}
运行结果 说明我们这个tom是tom类创建的,也是person的子类创建的