类的继承(Inheritance)

对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且派生类可以修改或增加新的方法使之更合适特殊的需要。

1.继承的产生(extends关键字)

在Java语言中,类的继承很简单,使用extends关键字。

【例1-1】定义Clock的子类----使用extends关键字。

定义Clock类:

public class Clock
{
    //成员变量
    int hour;    //变量hour用来描述对象的状态,以下同理
    int minute;
    int second;

    //成员方法
    public void setTime(int newH, int newM, int newS)
    {
        hour = newH;
        minute = newM;
        second = newS;
    }

    public void showTime()
    {
        System.out.println(hour+":"+minute+":"+second); 
    }

}

使用extends关键字实现对Clock类的继承:

public class subClock extends Clock
{
    String clock;
}

说明:
(1)public class subClock extends Clock 表示子类 subClock 继承自父类 Clock。

(2)子类拥有父类所拥有的成员属性和方法。

(3)“String clock;”语句表示子类可以定义自己独有的属性,同理也可以拥有自己独有的方法。

Java语言中的继承与C++不同,所有类均从一个根类Object中派生出来。除Object之外的任何类都有一个直接的超类。如果一个类在声明是未指明其直接超类,那么默认即为Object。

例如:

class Point

{
       float x, y;

}

与下面等价:

Class Point extends Object

{

      float x, y;

}

也就是说Java的所有类只有唯一的一个父类,继承关系使得Java中所有的类构成一棵树,Object类就是这棵树的根。

2.继承与构造方法

与类的其他方法一样,构造方法也可以继承。继承的原则如下:

(1)如果子类没有定义构造方法,则继承父类无参数的构造方法,即将父类无参数的构造方法作为自己的构造方法。

(2)如果子类定义了构造方法,无论是无参数的构造方法还是带参数的构造方法,在创建子类对象时,首先执行父类的无参数构造方法,然后再执行自己的构造方法。

【例1-2】子类继承父类的无参数构造方法。

class Father
{
    String s = "Run constructor method of Father";
    public Father()
    {
        //构造方法
        System.out.println(s);
    }
}

class Son extends Father
{
    public void output()
    {
        System.out.println("Run output() method of Son";
       }
}

class MyClass
{
    public static void main(String args[])
    {
        Father obfather = new Father();
        Son obson = new Son;
        obson.output();
    }
}

【例1-3】子类定义了一个带参数的构造方法

class Father
{
    String s = "Run constructor method of Father";
    public Father() //父类的构造方法
    {
        System.out.println(s);
    }

    class Son extends Father
    {
        public Son(String str)  //子类的构造方法
        {
            s = str;
            System.out.println(s);
        }
    }
    
    public void output()
    {
        System.out.println("Run output() method of Son");
    }
}

class MyClass
{
    public static void main(String arg[])
    {
        Father obfather = new Father();
        Son obson = new Son("Run constructor of son.");
        obson.output();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值