java 继承抽象类_java继承与抽象类的关系

首先看继承代码

class Instrument {

void play(Note n) { print("Instrument.play() " + n); }

String what() { return "Instrument"; }

void adjust() { print("Adjusting Instrument"); }

}

class Wind extends Instrument {

void play(Note n) { print("Wind.play() " + n); }

String what() { return "Wind"; }

void adjust() { print("Adjusting Wind"); }

}

class Percussion extends Instrument {

void play(Note n) { print("Percussion.play() " + n); }

String what() { return "Percussion"; }

void adjust() { print("Adjusting Percussion"); }

}

class Stringed extends Instrument {

void play(Note n) { print("Stringed.play() " + n); }

String what() { return "Stringed"; }

void adjust() { print("Adjusting Stringed"); }

}

class Brass extends Wind {

void play(Note n) { print("Brass.play() " + n); }

void adjust() { print("Adjusting Brass"); }

}

class Woodwind extends Wind {

void play(Note n) { print("Woodwind.play() " + n); }

String what() { return "Woodwind"; }

}

public class Music3 {

// Doesn’t care about type, so new types

// added to the system still work right:

public static void tune(Instrument i) {

// ...

i.play(Note.MIDDLE_C);

}

public static void tuneAll(Instrument[] e) {

for(Instrument i : e)

tune(i);

}

public static void main(String[] args) {

// Upcasting during addition to the array:

Instrument[] orchestra = {

new Wind(),

new Percussion(),

new Stringed(),

new Brass(),

new Woodwind()

};

tuneAll(orchestra);

}

}

基类Instrument 的方法都是“哑”方法,它这样的设计的目的是所有导出类(子类)创建一个通用的接口(play,what,adjust)。

那么创建一个通用接口的理由是什么?

理由1:不同的子类可以用不同方式表示此接口。通用接口建立起一种基本形式,用来表示导出类的共同部分。

理由2:把Instrument (父类)搞成抽象类。我们创建抽象类的目的是通过通用接口操作一系列的类。

抽象类目的就是建立通用接口,一种通用基本形式,只有方法定义,没有方法体实现。通俗讲就是一种类型标准。

抽象类概念:包含抽象方法的类叫做抽象类。

抽象后的乐器关系图

906d6d857297

image.png

可以看出除了基类没有任何变化。

抽象类是普通类和接口之间的一种中庸之道,抽象类有它的使用场景。譬如。部分接口实现,部分接口定义为抽象方法,导出类直接集成就可以了。

抽象类带来的好处是:更快的代码开发,更好的代码组织,更好拓展程序及更容易的代码维护。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值