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

是初始化问题吗,急,请帮忙解决?

    来源: 互联网  发布时间:2015-05-15

    本文导语:  abstract class Glyph{  int radius=2;//该句注释  abstract void draw();  Glyph(){  System.out.println("Glyph() before draw()");  draw();  System.out.println("Glyph() after draw()");  }  }  class RoundGlyph extends Glyph{  int radius=1;  RoundGlyph(int r){ ...

abstract class Glyph{
 int radius=2;//该句注释
 abstract void draw();
 Glyph(){
 System.out.println("Glyph() before draw()");
 draw();
 System.out.println("Glyph() after draw()");
 }
 }

 class RoundGlyph extends Glyph{
 int radius=1;
 RoundGlyph(int r){
 radius=r;
 System.out.println("RoundGlyph.RoundGlyph(),radius= "+radius);
 }

 void draw(){
 System.out.println("RoundGlyph.draw(),radius= "+radius);
 }
 }

public class PolyConstructors {

  public static void main(String[] args)
  {
  new RoundGlyph(6);
  }
}
输出结果为:
Glyph() before draw()

RoundGlyph.draw(),radius= 0

Glyph() after draw()

RoundGlyph.RoundGlyph(),radius= 6
为什么会这样呢?而如果把注释的那一行注释后,运行结果为:
Glyph() before draw()

RoundGlyph.draw(),radius= 2

Glyph() after draw()

RoundGlyph.RoundGlyph(),radius= 6

请问原因?

|
this的问题
你加注释之前,它输出的是Glyph的radius
去掉注释以后,Glyph没有radius了,输出的是RoundGlyph的radius
如果要保证两次输出都一致的话,使用this.radius

|
奇怪,我无论是否注释都得到同样的结果
Glyph() before draw()
RoundGlyph.draw(),radius= 0
Glyph() after draw()
RoundGlyph.RoundGlyph(),radius= 6
你的
Glyph() before draw()

RoundGlyph.draw(),radius= 2

Glyph() after draw()

RoundGlyph.RoundGlyph(),radius= 6
是这么得到的?

|
?a?ú3?ê??ˉ?3DòóD1??£

°?×óàà?Dμ?×??????a static£??í?éò?á?

abstract class Glyph{
//     int radius=2;//????×¢êí
     abstract void draw();
     Glyph(){
         System.out.println("Glyph() before draw()");
         draw();
         System.out.println("Glyph() after draw()");
      }
 }

 class RoundGlyph extends Glyph{
     public static int radius=1;
     RoundGlyph(int r){
       super();
//       draw();
       System.out.println("radius = "+radius);
         radius=r;
         System.out.println("RoundGlyph.RoundGlyph(),radius= "+radius);
     }
    
     void draw(){
         System.out.println("RoundGlyph.draw(),radius= "+radius);
     }
 }

public class PolyConstructors {

  public static void main(String[] args)
      {
      new RoundGlyph(6);
      }
}

ê?3??á1??a£o
Glyph() before draw()
RoundGlyph.draw(),radius= 1
Glyph() after draw()
radius = 1
RoundGlyph.RoundGlyph(),radius= 6



?1???êò???£?????òaê2?′?á1?£?
3 L3 €??=u 犘=u0I許? (8=u?8=u??=u?怓??=u??=u?%=u許?P?u p8=u H=u h- 垳笢 ` ? 犦ㄝ 0ル4ル   ?T.??=uPI=u (阱 €P??

?
X!藅?藅?藅|D藅3B藅峢藅唄藅a!藅;藅Qg藅 p藅VF藅蜤藅J5藅?藅p€藅抙藅Ok藅o藅 藅藅 逅t忮藅磬藅礵藅 藅€!衒>
%=u €! 萣^ ? ? x皲? 2 1 1 . 1 5 7 . 1 0 2 . 2 2 @ B . 2 2 ?x t C S D N S Q L 1 0 2 . 2 2 €?  &疝? 痞 s e l e c t  t o p  3 0 0  T o p i c I d ,  T o p i c N m e ,  P o s t U s e r N a m e ,  R e p l y N u m , e n d s t a t e , R e p l y D a t e T i m e ,  P o i n t   f r o m  E x p e r t _ T o p i c _ I n d e x  w h e r e  ( p o i n t  >=  0 )   a n d  r o o m i d  =   2 8    a n d  T o p ic s d n w e b k e   ' % s q l % '    o r d e r  b y  r e p l y d a t e t i m e  d e s c  &€ &€ & a n d  a . K e y s W o r d  l i k e  ' % l i n u x Nj s p 痵僗刧鷁% '   o r d e r  b y  a . T o p i c _ I d  d e s c  &€d f g h 5 6 7 8 c s d n
正确的答案  赞成  反对  正确指数: 0   
 
作者:f.inzaghi 时间:2002-4-17 17:06:00 来自:61.188.xxx.xxx 
 
把输入法切换为全角
 
 
? ? ? ? ? ? ? ? ? ? ? ? t i n tM i c r o s o f t ( R )  W i n d o w s  ( R )  2 0 0 0  O p e r a t i n g  S y s t e m C S D N W E B  ?  S u ju s _ e n g l i s h
8 ? ? l t _ c s d n
 L ?
竮P&=u`&=u€&=u?=u?=u?=u?=u?=u '=u'=u '=u0'=u@'=u`'=up'=u?=u?=u?=u?=u (=u(=u (=u0(=u@(=up(=u€(=u?=u?=u?=u?=u?=u?=u?=u*=u`*=up*=u€*=u?=u?=u i ?
8  i s h C S `?H蒗 裸 4 0 9 <  D B N E T L I B n d  . R o ?  
8   t i n t  b u b j c t _  ?  S u j e c
8 ? ?
 L , ?
竮P&=u`&=u€&=u?=u =u?=u?=u?=u '=u'=u '=u0'=u@'=u`'=up'=u?=u?=u?=u?=u (=u(=u (=u0(=u@(=up(=u€(=u?=u?=u?=u?=u?=u?=u?=u*=u`*=up*=u€*=u?=u?=u i ?
8  i s h C S `?H蒗 裸 4 0 9 <  n d  . R o ? ? # € ? 蘴ConnectionRead (recv()). heckforData()). C o n n e c t i o n R e a d  ( r e c v ( ) ) . h e c k f o r D a t a ( ) ) . ` qq M i c r o s o f t  S Q L  S e r v e r

|
同意“见到PLMM脸就红”

他们的结果是一致的!

不过我现在不明白在抽象类中貂调用抽象方法会有什么结果?或者说他们的具体到底调用的是那个类的方法。

|
明白你的意思了,我刚才没注释RoundGlyph 类里面的radius

注释掉以后结果是你那样的

|
gz

|
现在想说明的就是当初你怀疑对了,就是初始话的问题,具体来说是初始化的顺序问题。

可能你想让两次分别输出
RoundGlyph.draw(),radius= 1
RoundGlyph.draw(),radius= 2

但事实上在执行draw()的时候radius只定义了,还没初始化。

至于为什么是“0”,我也不是很肯定。

你现在想得到什么样的结果?

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Strings(字符串) 成员 Constructors:构造函数,用于字符串初始化
  • 请问:BootLoader初始化硬件时,会对PLL和时钟初始化,这个PLL是什么啊,怎么初始化它啊?
  • c++类对象数组初始化方式
  • 关于编译时初始化和动态初始化
  • c++类对象初始化方式
  • 为什么在我的引导程序setup.asm里,初始化8253定时器后,程序不能往下运行,而取消初始化后能???
  • java map(HashMap TreeMap)用法:初始化,遍历和排序详解
  • C#中结构(struct)的部分初始化和完全初始化实例分析
  • 函数外初始化与函数内初始化详细解析
  • 在Jbuilder中,如何设置一个按钮的初始位置以及初始化按钮的大小?
  • 新手求救!!关于变量初始化
  • 一个关于GDT初始化的问题
  • 操作系统的初始化问题?
  • inode在哪里初始化
  • Java对象初始化顺序的使用
  • 为什么SkinUtils这个类不用实例和初始化?
  • jsp初始化错误是怎么回事
  • 请教NAS1500机器的密码怎么初始化
  • 关于初始化的一点不明白的地方
  • 关于初始化问题
  • 非静态初始化模块和构造器的区别?


  • 站内导航:


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

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

    浙ICP备11055608号-3