当前位置: 技术问答>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
请问原因?
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的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
是这么得到的?
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
°?×óàà?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”,我也不是很肯定。
你现在想得到什么样的结果?
可能你想让两次分别输出
RoundGlyph.draw(),radius= 1
RoundGlyph.draw(),radius= 2
但事实上在执行draw()的时候radius只定义了,还没初始化。
至于为什么是“0”,我也不是很肯定。
你现在想得到什么样的结果?