<<  < 2011 - >  >>
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30




在Java语言中,用extends关键字来表示一个类继承了另一个类,例如:

public class Sub extends Base{

}

那么Sub类到底继承了Base类的哪些东西呢?

 当Sub类和Base类位于同一个包中:Sub类继承Base类中public、protected和默认访问级别的成员变量和成员方法。

当Sub类和Base类位于不同的包中:Sub类继承Base类中public和protected访问级别的成员变量和成员方法。

假定Sub和Base类位于同一个包中,以下程序演示在Sub类中可继承Base类的哪些成员变量和方法。

public class Base{

public int publicVarOfBase=1; //public访问级别

private int privateVarOfBase=1; //private访问级别

int defaultVarOfBase=1; //默认访问级别

protected void methodOfBase(){} //protected访问级别

}

public class Sub extends Base{

public void methodOfSub(){

publicVarOfBase=2; //合法,可以访问Base类的public类型的变量

defaultVarOfBase=2; //合法,可以访问Base类的默认访问级别的变量

privateVarOfBase=2; //非法,不能访问Base类的private类型的变量

methodOfBase(); //合法,可以访问Base类的protected类型的方法

}

public static void main(String args[]){

Sub sub=new Sub();

sub.publicVarOfBase=3; //合法,Sub类继承了Base类的public类型的变量

sub.privateVarOfBase=3; //非法,Sub类不能继承Base类的private类型的变量

sub.defaultVarOfBase=3; //合法,Sub类继承了Base类的默认访问级别的变量

sub.methodOfBase(); //合法,Sub类继承了Base类的protected类型的方法

sub.methodOfSub(); //合法,这是Sub类本身的实例方法

}

}

Java语言不支持多继承,即一个类只能直接继承一个类。例如以下代码会导致编译错误。

class Sub extends Base1,Base2,Base3{…}

尽管一个类只能有一个直接的父类,但是它可以有多个间接的父类,例如以下代码表明Base1类继承Base2类,Sub类继承Base1类,Base2类是Sub类的间接父类。

class Base1 extends Base2{…}

class Sub extends Base1{…}



           图6-1 一棵继承树



所有的Java类都直接或间接地继承了java.lang.Object类。Object类是所有Java类的祖先,在这个类中定义了所有的Java对象都具有的相同行为,本书第19章的19.1节(Object类)归纳了在Object类中定义的方法。在Java类框图中,具有继承关系的类形成了一棵继承树。图6-1显示了一棵由生物Creature、动物Animal、植物Vegetation和狗Dog等组成的继承树。

在以上继承树中,Dog类的直接父类为Animal类,它的间接父类包括Creature和Object类。Object、Creature、Animal和Dog类形成了一个继承树分支,在这个分支上,位于下层的子类会继承上层所有直接或间接父类的属性和方法。如果两个类不在同一个继承树分支上,就不会存在继承关系。例如Dog类和Vegetation类,它们不在一个继承树分支上,因此不存在继承关系。

假如在定义一个类时,没有使用extends关键字,那么这个类直接继承Object类。例如以下Sample类的直接父类为Object类。

public class Sample{…}

maomao看着就觉得好难哦
发表评论:
天涯博客欢迎您!