黑马程序员技术交流社区

标题: 程序中不明白的警告 [打印本页]

作者: 陆旭东    时间: 2013-3-28 16:55
标题: 程序中不明白的警告
本帖最后由 陆旭东 于 2013-3-29 13:23 编辑
  1. public class Weekday {
  2.         private Weekday(){
  3.                
  4.         }
  5.         public final static Weekday SUN=new Weekday(){
  6.                 public Weekday nextDay(){//此处报错,说nextDay方法在此处永远不会被用
  7.                         return SUN;
  8.                 }
  9.         };
  10.         public final static Weekday MON=new Weekday(){
  11.                
  12.         };
  13.         
  14.         /*public Weekday nextDay(){
  15.                 if(this==SUN){
  16.                         return SUN;
  17.                 }else{
  18.                         return SUN;
  19.                 }
  20.         }*/
  21.         public String tostring(){
  22.                 return this==SUN?"SUN":"MON";
  23.         }

  24. }
复制代码
不知道为什么,但是去掉注释又可以了。
作者: 邵震    时间: 2013-3-28 17:05
  1. public class java0328d3
  2. {
  3.         
  4.         private   Weekday()
  5.                 {
  6.                
  7.         }
  8.         public final static Weekday SUN=new Weekday(){
  9.                 public Weekday nextDay(){//此处报错,说nextDay方法在此处永远不会被用
  10.                         return SUN;
  11.                 }
  12.         };
  13.         public final static Weekday MON=new Weekday(){
  14.                
  15.         };
  16.         
  17.         /*public Weekday nextDay(){
  18.                 if(this==SUN){
  19.                         return SUN;
  20.                 }else{
  21.                         return SUN;
  22.                 }
  23.         }*/
  24.         public String tostring(){
  25.                 return this==SUN?"SUN":"MON";
  26.         }

  27. }
复制代码
不知道是你复制错了还是怎么了 我提示的是第四行(也就是你打得第二行,Weekday 前面)需要返回值类型。
作者: 魏福伟    时间: 2013-3-28 17:14
可以运行
  1. public class Weekday
  2. {
  3.         private Weekday()
  4.         {

  5.         }

  6.         public final static Weekday        SUN        = new Weekday()
  7.                                                                         {
  8.                                                                                 public Weekday nextDay()
  9.                                                                                 {// 此处报错,说nextDay方法在此处永远不会被用
  10.                                                                                         return MON;
  11.                                                                                 }
  12.                                                                         };
  13.         public final static Weekday        MON        = new Weekday()
  14.                                                                         {
  15.                                                                                 public Weekday nextDay()
  16.                                                                                 {// 此处报错,说nextDay方法在此处永远不会被用
  17.                                                                                         return SUN;
  18.                                                                                 }
  19.                                                                         };

  20.         public Weekday nextDay()
  21.         {
  22.                 if (this == SUN)
  23.                 {
  24.                         return SUN;
  25.                 }
  26.                 else
  27.                 {
  28.                         return SUN;
  29.                 }
  30.         }

  31.         @Override
  32.         public String toString()
  33.         {
  34.                 return this == SUN ? "SUN" : "MON";
  35.         }

  36.         public static void main(String[] args)
  37.         {
  38.                 System.out.println(SUN);
  39.                 System.out.println(SUN.nextDay());
  40.         }

  41. }
复制代码
你的toString方法应该是重写父类的吧,你方法名写错啦
作者: 董延京    时间: 2013-3-28 17:25
本帖最后由 董延京 于 2013-3-28 17:35 编辑

你用了匿名内部类的写法,你的SUN相当于一个子类的实例代替父类,nextDay()方法是这个匿名内部类的扩展而来,不是继承来的,而SUN对象到底它还是父类的实例,是调用不到子类的扩展方法nextDay()的。所以Eclipse会提示(警告)你这个方法永远不会使用了。
如果你的父类中本身没有这个nextDay()方法,那么你建立出的这个父类Weekday实例SUN,永远都没办法使用这个子类方法了。所以你去掉注释,那么警告就消除了。下面这个例子,编译无法通过,可以说明父类调用不到子类的扩展方法:
  1. package Test;

  2. public class Test20 extends Test21 {

  3.   public void test() {};

  4.   public static void mian(String[] args) {
  5.     Test21 test = new Test20();
  6.    test.test();//无法编译通过,要求在Test21中建立test()方法。
  7.   }
  8. }

  9. class Test21 {

  10. }
复制代码

作者: 熊永标    时间: 2013-3-28 17:26
本帖最后由 熊永标 于 2013-3-28 17:27 编辑
  1. public class Weekday {
  2.         private Weekday(){
  3.                
  4.         }
  5.         public final static Weekday SUN=new Weekday(){//定义Weekday的子类
  6.                         @Override
  7.                 public Weekday nextDay(){//这相当于重写这个方法,
  8.                     System.out.println("aaa");   
  9.                         return SUN;
  10.                 }
  11.         };
  12.         public final static Weekday MON=new Weekday(){
  13.                
  14.         };
  15.         
  16.         public Weekday nextDay(){
  17.                 if(this==SUN){
  18.                         return SUN;
  19.                 }else{
  20.                         return SUN;
  21.                 }
  22.         }
  23.         public String tostring(){
  24.                 return this==SUN?"SUN":"MON";
  25.         }
  26.         public static void main(String[] args) {
  27.                         System.out.println(Weekday.SUN.nextDay());
  28.                 }
  29. }
复制代码
结果为:
aaa
Weekday$1@c791b9
并没有什么错误呀?
作者: 张超    时间: 2013-3-28 17:33
熊永标 发表于 2013-3-28 17:26
结果为:
aaa
Weekday$1@c791b9

终于遇到老乡了
作者: 熊永标    时间: 2013-3-28 17:37
什么意思呀
作者: 陈丽莉    时间: 2013-3-28 18:13
还有问题请继续追问,没有的话,将帖子分类改成【已解决】哦~
作者: 夏凡    时间: 2013-3-28 22:19
本帖最后由 夏凡 于 2013-3-28 22:28 编辑
  1. public class Weekday {
  2.         private Weekday(){
  3.                
  4.         }
  5.         public final static Weekday SUN=new Weekday(){
  6.                 public Weekday nextDay(){//此处报错,说nextDay方法在此处永远不会被用
  7.                         return SUN;
  8.                 }
  9.         };

  10.         public final static Weekday MON=new Weekday(){};

  11.         public String tostring(){
  12.                 return this==SUN?"SUN":"MON";
  13.         }
  14. }
复制代码
此处并无语法错误,按程序的原意,可以运行并得到相应的结果,楼主是不是之前有其他地方出错了?
作者: tshch1989    时间: 2013-3-29 00:06
class Weekday {
    private Weekday(){
            
    }
    public final static Weekday SUN=new Weekday(){
            public Weekday nextDay(){//此处报错,说nextDay方法在此处永远不会被用
                    return SUN;
            }
    }.nextDay();
    public final static Weekday MON=new Weekday(){
            
    };
   
    /*public Weekday nextDay(){
            if(this==SUN){
                    return SUN;
            }else{
                    return SUN;
            }
    }*/
    public String tostring(){
            return this==SUN?"SUN":"MON";
    }

}

请看代码提示错误处我的更改,匿名内部类中函数未被调用,SUN对象并没有指向匿名内部类,而仅仅是接收匿名内部类调用函数后的返回值;请参阅毕老师的匿名内部类部分;希望对你有帮助;;




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2