当前位置:  技术问答>java相关

在JAVA中的抽象类中有必要定义抽象方法吗?我直接在它的子类中定义并实现这个方法不一样吗?

    来源: 互联网  发布时间:2015-06-02

    本文导语:  小弟初学JAVA,为此迷惑中... | shape调用的时候下蒴造型了circle,但是如果你没定义draw(),那我明明把s1赋予了一个圆,居然画不出来,岂不是不符合逻辑? | 根据具体情况而...

小弟初学JAVA,为此迷惑中...

|
shape调用的时候下蒴造型了circle,但是如果你没定义draw(),那我明明把s1赋予了一个圆,居然画不出来,岂不是不符合逻辑?

|
根据具体情况而定的

如果这个方法不只一个子类会用到,那就定义在抽象类中

如果只有一个特殊子类会用到,那么就不用定义在抽象类中了

|
反过来问,你如果抽象类一个方法都不定义,那要抽象类干什么?
抽象类里面定义的抽象方法(其中一种用法)就是用于定义一个现在不实现(无法实现或者不必要实现),但强制子类必须实现的方法。
举个简单的例子:
例如定义一个抽象类 Shape,它有子类Circle和Square。我们为Shape设定一个抽象方法计算面积double getArea()。
凡是Shape的子类一定要实现这个方法,因此调这个方法就可以获得面积。但是你如果要再父类里实现,显然是不可能的--你还不知道具体是什么形状呢。

|
是这样的,这个抽象的方法可能是一个名字,但是在不同的子类中的用法可能有小的差异,这样就在抽象类中定义一个抽象的方法算是对这个方法的一个概括,不同子类中实现的改抽象方法会有小的差异,但大体作用上相同.

|
抽象类中的抽象函数存在的必要性?

你要多理解理解面向对象的思想

亚洲人是黑眼珠

欧洲人是蓝眼珠(假设全是蓝的:))

那么,人是不是可以没有眼珠呢?

明白了吧

|
是这样的,这个抽象的方法可能是一个名字,但是在不同的子类中的用法可能有小的差异,这样就在抽象类中定义一个抽象的方法算是对这个方法的一个概括,不同子类中实现的改抽象方法会有小的差异,但大体作用上相同.

|
也就是说抽象类里面的抽象方法将子类里面的具有相同功能但实现上稍有差异的一些方法作了一个抽象,这下子应该明白了吧?

|
抽象类方法的定义还涉及到一个class upcast和downcast的问题。

|
当然可以,只是、你要看看你的目的呀!难道你要多做无用功吗?

|
Patrick_DK(疾风摩郎) 好像是对的,我没细看。

|
你看我的回答了吗??

|
我举个例子给你:比如有三角型,正方形,长方形,你说他们的共同父类是什么?

|
它的父类肯定是“形状”,但是形状里面的方法不可能把计算形状面积或周长的具体方法定义出来,因为他还没有确定是什么形状,所以只好定义成抽象的,但是如果你非要定义成非抽象的,那么你说这么多形状岂不是永远不可能有共同的父类了,那么这就违背了面向对象的原则

|
对,你说的边数是他们共同有的特征,但是你有没有想过,一个完整的类,就如你说的“多边型”必定也应当有面积的定义,要不难道说一个多边型不能有面积???但是面积又要看具体形状来定,因此在“多边型”的类里面只能对他们做个抽象的定义,也就是说只有“面积”这个方法名字,来证明“多边型”也有面积,至于怎么实现,还要看子类是什么样的多边型。

|
对,你说的边数是他们共同有的特征,但是你有没有想过,一个完整的类,就如你说的“多边型”必定也应当有面积的定义,要不难道说一个多边型不能有面积???但是面积又要看具体形状来定,因此在“多边型”的类里面只能对他们做个抽象的定义,也就是说只有“面积”这个方法名字,来证明“多边型”也有面积,至于怎么实现,还要看子类是什么样的多边型。

|
也就是说,不能因为面积无法定义而在多边形里面不定义面积这个方法。

|
抽象类是面向象性理论多太性的一种体现!
还有overload,override,interface!!!!

楼上说的是:
一个shape类可以作为抽象类,
用它可以引用circle,rectangle...,而在调用其方法时将产生下朔造型!
这就体现了多台行!!!!!!!!
shape s1 = new circle(..);
shape s2 = new rectangle(..);
s1.draw();//结果话了一个元
s2.draw();//结果话了一个矩形
自己慢慢分析!狠有必要的!


|
拜托,你考虑父类的时候不要总是局限于它的方法是为了子类继承的,你要想想父类也要有自己的方法阿.它的方法不只是为了子类继承,它的方法也表明了他自己拥有这个属性!!!

|
上面的就是说:如果你shape中不定义draw(),那么将在s1.draw()语句中无法划出一个圆。

    
 
 

您可能感兴趣的文章:

  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 请问JAVA如何定义常量实行多个JAVA程序共用?
  • java命名空间java.awt类radialgradientpaint的类成员方法: getradius定义及介绍
  • java能不定义常量
  • java命名空间java.text接口attributedcharacteriterator的类成员方法: getallattributekeys定义及介绍
  • 请问再java中怎样定义动态数组?
  • java命名空间java.beans接口propertyeditor的类成员方法: supportscustomeditor定义及介绍
  • java自定义枚举转换器示例
  • java命名空间java.text接口attributedcharacteriterator的类成员方法: getattributes定义及介绍
  • 在java里如何定义常量?
  • java命名空间java.util类locale的类成员方法: getisocountries定义及介绍
  • 菜鸟问题:unix中有像windows那样的自定义的环境变量吗?用java如何取
  • java命名空间java.awt类image的类成员方法: undefinedproperty定义及介绍
  • Java中怎样定义全局变量???
  • java命名空间java.beans接口customizer的类成员方法: setobject定义及介绍
  • 笨苯问题:java类中如何读取xml中定义的属性信息。
  • java命名空间java.awt类toolkit的类成员方法: createcomponent定义及介绍
  • c/c++ iis7站长之家
  • java命名空间java.lang类classloader的类成员方法: getpackages定义及介绍
  • java中函数的缺省参数怎么定义?
  • java命名空间java.net类uri的类成员方法: getport定义及介绍
  • java自定义日期转化类示例
  • java命名空间java.lang类runtime的类成员方法: runfinalization定义及介绍
  • Java中如何通过方法名动态调用方法?
  • java命名空间java.awt.im类inputcontext的类成员方法: getinputmethodcontrolobject定义及介绍
  • <%@ page import="java.lang.Math"%>后用round(float a)方法,怎么报找不到round方法?
  • java命名空间java.lang类system的类成员方法: runfinalization定义及介绍
  • java初学--在java中有个native本地方法 说是能嵌入c 不知道具体?
  • java命名空间java.lang类stacktraceelement的类成员方法: isnativemethod定义及介绍
  • 在JAVA中只有一种派生子类的方法吗?我记得在C++ 中有3种派生方法的!
  • java命名空间java.lang类stacktraceelement的类成员方法: getmethodname定义及介绍
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java父类和子类初始化顺序的深入理解
  • 浅谈Java中父类与子类的加载顺序详解
  • Java中子类调用父类构造方法的问题分析
  • java中子类继承父类,程序运行顺序的深入分析
  • 基于java中子类的继承性的应用介绍
  • java学习第三天,老师嘴里一会儿一个类,一会一个子类,父类。偶听不懂,高手解释以下吧!
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.security类keystore的类成员方法: getdefaulttype定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getclasspath定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javaserializedobjectmimetype定义及介绍
  • 我对JAVA一窍不通,可惜别人却给我一个Java的project,要我做一个安装程序,请问哪里有JAVA INSTALLER下载,而且我要不要安装java的sdk才能完成此项任务?
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javafilelistflavor定义及介绍
  • 新年第一天,让我们讨论一下未来一年JAVA的发展趋势! 个人认为,JAVA将主要朝ERP和JAVA手机方面发展!
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getvmname定义及介绍
  • 我想学Java,但不知道Java的实用的开发工具有那些,Java主要用在哪些方面,EJB到底是什么东西??
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getvmversion定义及介绍
  • redhat7.3下,java程序打印中文直接用java命令执行正常,用crontab执行java命令为乱码
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getspecname定义及介绍
  • 各位学java的朋友,学java的未来是什么,你们学java都用来开发什么项目啊!来者给分!!
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getspecversion定义及介绍
  • 请问java程序中的import为什么有的用java.….*,而有的又用java.….…,有什么区别吗?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3