Java类和对象(二)

本文探讨了面向对象编程中的继承与组合两种代码复用方式。通过实例讲解了继承如何实现代码复用,以及其在抽象编程中的作用。同时,对比了组合复用方式的灵活性和易于维护的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继承是面向对象编程不可缺少的组成部分,继承语法简单,使用关键字extends来实现继承,示例如下:

package com.shaoshuidashi.how;

class Car{
    public void startup(){
        System.out.println('startup');
    }
    public void stop(){
        System.out.println('stop');
    }
}
//Truck 继承自 Car
class Truck extends Car{

}

public class How{
    public static void main(String[] args) {
        Truck t = new Truck();
        t.startup();
        t.stop();
    }
}

可以看到Truck类后面添加extends Car以后,Truck就继承了Car类。

为什么要使用继承?上个例子中Truck类继承Car类以后,Truck类对象可以直接调用startup和stop方法,这就是使用继承的原因即代码复用。通常被继承的类称之为父类,继承的类称之为子类,子类继承父类以后,子类可以使用父类的public和protected修饰的数据和方法。但是继承最厉害的地方在于抽象编程,下一篇会详细介绍抽象编程。

Java还有另外一种代码复用的方式,示例如下:

//文件系统驱动类
class FSDriver{
    void open(){
    }
    void close(){
    }
    void write(String msg){
    }
    void read(){
    }
}
//写日志类,使用FSDriver来实现文件操作
class Log{
    private FSDriver driver = new FSDriver();
    public void errorLog(String msg){
        driver.open();
        driver.write(msg);
        driver.close();
    }
}
//数据库驱动类,使用FSDriver来实现文件操作
class DBDrvier{
    private FSDriver driver = new FSDriver();
    public void connect(){
        driver.open();
    }
    public void close(){
        driver.close();
    }
}

上面的例子中DBDrvier和Log类通过持有一个FSDriver 对象来实现对FSDriver功能的复用,这种复用方式称之为组合。

什么时候使用继承什么时候使用组合?从复用性考虑应该优先使用组合,继承往往更适用于抽象编程。使用组合复用代码使代码更易于阅读,因为组合对象的方法调用形式总是obj.method()的形式,代码维护者可以直观的看到调用了obj的method方法。而继承调用方法的形式为method(),method方法有可能是类自身的,也有可能是父类的或爷爷类的,有一个寻找实现的过程,比使用组合要稍微费劲一些。使用组合复用代码的另一个强有力的理由是:组合可以在运行时动态修改对象引用,当然引用对象需要能向上转型,关于向上转型将在下一篇中介绍,从这点来说使用组合复用代码更具灵活性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值