java中继承的概念以及使用实例


继承的概念
继承一般是指晚辈从父辈那里继承财产,也可以说是子女拥有父母所给予他们的东西。在面向对象程序设计中,继承的含义与此类似,所不同的是,这里继承的实体是类而非人。也就是说继承是子类拥有父类的成员。接下来,再通过一个具体的实例来说明继承的应用。
在动物园中有许多动物,而这些动物又具有相同的属性和行为,这时就可以编写一个动物类Animal(该类中包括所有动物均具有的属性和行为),即父类。但是对于不同类的动物又具有它自己特有的属性和行为,例如,鸟类具有飞的行为,这时就可以编写一个鸟类Bird,由于鸟类也属于动物类,所以它也具有动物类所共同拥有的属性和行为,因此,在编写鸟类时,就可以使Bird类继承于父类Animal。这样不但可以节省程序的开发时间,而且也提高了代码的可重用性。使用UML类图描述的Bird类与Animal类如图1所示。
1_090905084637_1.gif
图1 使用UML类图描述的Bird类与Animal类
子类对象的创建
在类的声明中,可以通过使用关键字extends来显式的指明其父类。其基本的声明格式如下:
[修饰符] class 子类名 extends 父类名
修饰符:可选参数,用于指定类的访问权限,可选值为public、abstract和final。
子类名:必选参数,用于指定子类的名称,类名必须是合法的Java标识符。一般情况下,要求首字母大写。
extends 父类名:必选参数,用于指定要定义的子类继承于哪个父类。
例如,定义一个Cattle类,该类继承于父类Animal,即Cattle类是Animal类的子类,具体代码如下:
abstract class Cattle extends Animal {
//…… 此处省略了类体的代码
}
继承的使用原则
子类可以继承父类中所有可被子类访问的成员变量和成员方法,但必须遵循以下原则。
l 子类能够继承父类中被声明为public和protected的成员变量和成员方法,但不能继承被声明为private的成员变量和成员方法。
l 子类能够继承在同一个包中的由默认修饰符修饰的成员变量和成员方法。
l 如果子类声明了一个与父类的成员变量同名的成员变量,则子类不能继承父类的成员变量,此时称子类的成员变量隐藏了父类的成员变量。
l 如果子类声明了一个与父类的成员方法同名的成员方法,则子类不能继承父类的成员方法,此时称子类的成员方法覆盖了父类的成员方法。
下面将通过一个具体的实例来说明继承的使用原则。
本实例主要实现定义一个动物类Animal及它的子类Bird,具体步骤如下。
(1)创建一个名称为Animal的类,在该类中声明一个成员变量live和两个成员方法,分别为eat()和move(),
具体代码如下:
Animal.java类的文件:

public class Animal {
public boolean live=true;                  //定义一个成员变量
public String skin="";
public void eat(){                 //定义一个成员方法
System.out.println("动物需要吃食物");
}
public void move(){                //定义一个成员方法
System.out.println("动物会运动");
}
}

(2)创建一个Animal类的子类Bird类,在该类中隐藏了父类的成员变量skin,并且覆盖了成员方法move(),具体代码如下:
Bird.java类的文件:

public class Bird extends Animal {
public String skin="羽毛";
public void move(){
System.out.println("鸟会飞翔");
}
}

(3)创建一个名称为Zoo的类,在该类的main()方法中创建子类Bird的对象并为该对象分配内存,然后对象调用该类的成员方法及成员变量,具体代码如下:
Zoo.java类的文件:

public class Zoo {
public static void main(String[] args) {
Bird bird=new Bird();
bird.eat();
bird.move();
System.out.println("鸟有:"+bird.skin);
}
}

在例程06中,eat()方法为从父类Animal继承下来的方法,move()方法为子类覆盖后的成员方法,skin变量为子类的成员变量。

(4)运行本实例,其运行结果如下:
动物需要吃食物
鸟会飞翔
鸟有:羽毛
完整代码:
Animal.java完整代码

public class Animal {
public boolean live=true;      //定义一个成员变量
public String skin="";
public void eat(){             //定义一个成员方法
System.out.println("动物需要吃食物");
}
public void move(){           //定义一个成员方法
System.out.println("动物会活动");
}
}

Bird.java完整代码

public class Bird extends Animal {
public String skin="羽毛";
public void move(){
System.out.println("鸟会飞翔");
}
}

Zoo.java完整代码

public class Zoo {
public static void main(String[] args) {
Bird bird=new Bird();
bird.eat();
bird.move();
System.out.println("鸟有:"+bird.skin);
}
}