A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 系磊 初级黑马   /  2012-7-31 11:08  /  1351 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我们都知道要重复使用程序代码又要保证维护和功能的扩展我们可以用继承来实现。我想知道除了继承还有其他方式可以实现么?如果有是什么方式,它们与继承的区别是什么,什么时候该用继承,什么时候用其他方式?

3 个回复

倒序浏览
除了继承,还有抽象类和接口。抽象类和接口就是为了解决java的单继承限制。如果继承一个抽象类或者实现一个接口,则必须实现这个抽象类或者接口的全部抽象方法,否则该类将保留从父类继承来的抽象方法,该类也必须定义为抽象类。当你不需要完全实现父类的方法时,用继承普通方法会简单很多。如果要全部实现,使用抽象类或者接口更方便、
回复 使用道具 举报
JAVA类全部继承于OBJECT,好像就是要解决继承混乱的问题。
至于抽象类和接口,个人觉得抽象类就像画画,先画个框架,再临摹框架画再添东西,接口好像链条上的配件,配件的规格给你了,你做个什么挂上去都可以。
我来给你举个例子:一个抽象的乐器类abstract Instrument.它里面有一个抽象的方法abstract void play();(提醒一下,没有方法体)。
     然后有其它的几个不同的乐器(比如Wind、Percussion、Stringed)来继承了前面的乐器抽象类,你应该知道,继承一般要重写基类的方法并实现,所以Wind、Percussion、Stringed都需要去重写play方法。
     比如Wind重写后是这样的public void paly() {System.out.println("这是Wind的play().")}。Percussion重写后是这样的public void paly() {System.out.println("这是Percussion的play().")}。Stringed重写后是这样的public void paly() {System.out.println("这是Stringed的play().")}。
     你实例化类Wind、Percussion、Stringed的对象,它们的引用分别为W,P,S。
     此时你这样调用W.play().play();S.play();
     出来的结果分别是:这是Wind的play().这是Percussion的play().这是Stringed的play().
     你看,这样就实现了多态。接口和抽象类有点类似,实现接口,然后去实现接口的中定义的方法。
回复 使用道具 举报
呵呵,还有抽象类和接口啊,下面简单的给你总结一下!!!
继承:java的继承通过extends 关键字来实现,实现继承的类被称为子类,被继承的类称为父类。
继承的好处:
1,提高了代码的复用性。
2,让类与类之间产生了关系。有了这个关系,才有了多态的特性。
注意:
类与类之间有所属关系才可以继承。所属关系 is a。java只支持单继承,不支持多继承。
抽象类:当多个类中出现相同功能,但是功能主体不同,这是可以进行向上抽取。用abstract修饰
抽象类的特点:
1,抽象方法一定在抽象类中。
2,抽象方法和抽象类都必须被abstract关键字修饰。
3,抽象类不可以用new创建对象。因为调用抽象方法没意义。
4,抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。
     如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。

接口:抽象类是从多个类中抽象出来的模版,如果将这种抽象进行的更彻底,则可以提炼出更加特殊的“抽象类”——
接口。接口里不能包含普通方法,接口里所有的方法都是抽象的!
接口和抽象 共同点:
1、都不能被实例化,它们都位于继承树的顶端,用于被其它类实现和继承。
2、都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象类方法。
接口和抽象 不同点:
1、接口里只能包含抽象方法,不包含已经提供实现的方法。抽象类则完全可以包含普通方法。
2、 接口里不能定义静态方法,抽象类里可以定义静态方法
3、接口里只能定义静态常量属性,不能定义普通属性;抽象类里则既可以定义普通属性也可以定义静态常量属性。
4、接口里不包含构造器;抽象类里可以包含构造器 5、接口里不能包含初始化块,但抽象类里完全可以包含初始化块
6、 一个类最多只能有一个直接父类,包含抽象类。但一个类可以直接实现多个接口 。
希望对你有所帮助!!!!!{:soso_e100:}



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马