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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 張帅 中级黑马   /  2013-11-7 14:59  /  2019 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 張帅 于 2013-11-7 19:46 编辑

class Name{   private Name(){};
  public static final Name ZS = new Name();
  public static final Name LS = new Name();
public Name nextName(){
       if(this==ZS)
      {
             return LS;
      }
     else
     {
            return ZS;
     }
}
  public String toString()
          {
               return this=="ZS"?"ZS":"LS";
          }

}

上边 是我代码的一部分我想将红色的部分用匿名内部类替换,给种方法。。然后我用的是
public static final Name ZS = new Name()
{ public Name nextName(){
      return LS;
}
};覆盖了子类的方法,如果是ZS 返回LS,
然后将nextName方法变成了
public Name nextName();报错,求正确方法。

6 个回复

倒序浏览
  1. abstract class Name{   
  2.         private Name(){};
  3.         public static final Name ZS = new Name(){
  4.                 public Name nextName() {
  5.                         return LS;
  6.                 }
  7.         };
  8.         public static final Name LS = new Name(){
  9.                 public Name nextName() {
  10.                         return ZS;//"zhangsan";
  11.                 }
  12.         };
  13.        
  14.         public abstract Name nextName();
  15.         public String toString()
  16.         {
  17.                 //return this == "ZS" ?"ZS":"LS";-->楼主这里没报错嘛 this=="ZS",Name对象和字符串相等?
  18.                  return this == ZS ?"ZS":"LS";
  19.         }
  20. }
复制代码
回复 使用道具 举报 1 0
楼主你对匿名内部类的定义还没清楚,
定义匿名内部类的前提:
内部类必须是继承一个类或者实现接口。
你说:覆盖了子类的方法,如果是ZS 返回LS,
不是很懂你的需求,暂时帮不了你,不懂请追问

LZ的代码出现几个错误:
1、现在你的类Name既没继承,也不定义成接口,是无法定义匿名内部类的,
    匿名内部类不用刻意去做,如果是碰到需要创建一个类来实现某种功能的时候,
    为简便书写才用匿名内部类的;

class Name{   private Name(){};
   public static final Name ZS = new Name();
   public static final Name LS = new Name();


public  Name nextName(){
       if(this==ZS)

      {
             return LS;
      }
     else
     {
            return ZS;
     }
}
  

2、你写的toString方法体不对,Name和String是无法比较的
public String toString()
          {

               return this=="ZS"?"ZS":"LS";
          }

回复 使用道具 举报
Name类中应该有一个抽象方法:public abstract Name nextName();
这样匿名内部类覆写父类Name的nextName方法才不会报错。
你的这句public Name nextName();忘记加上abstract修饰了。
回复 使用道具 举报

还可以这样定义,学习了,请问一下该怎么去用呢?
回复 使用道具 举报
miedongdong 发表于 2013-11-7 16:08
还可以这样定义,学习了,请问一下该怎么去用呢?

具体使用请查看张老师高新技术,有关枚举的视屏12-14集。里面有详细介绍~
回复 使用道具 举报
李慧声 发表于 2013-11-7 16:12
具体使用请查看张老师高新技术,有关枚举的视屏12-14集。里面有详细介绍~ ...

好的,那个我都还没看!谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马