class Person {
  private String name;
  private String location;  Person(String name) {
    this.name = name;
    location = "beijing";
  }
  
  Person(String name,String location) {
    this.name = name;
    this.location = location;
  }
  
  public String info() {
    return 
      "name: "+name+
      " location: "+location;
  }
}class Teacher extends Person {
private String capital;

Teacher(String name, String capital) {
this(name, "beijing", capital);
}

Teacher(String n, String l, String capital) {
super(n, l);
this.capital = capital;
}

public String info() {
return super.info() + "capital " + capital;

}class Student extends Person {
    private String school;
    Student(String name,
String school) {
        this(name,"beijing", school);
    }
    Student(String n,String l
,String school) {
        super(n,l);
        this.school = school;
    }
    public String info() {
        return super.info()+
  " school: "+school;
    }
}public class TestTeacher {
    public static void main(String[] args) {
        Person p1 = new Person("A");
        Person p2 = new Person("B","shanghai");
        Student s1 = new Student("C","S1");
        Student s2 = 
            new Student("C","shanhai","S2");
        System.out.println(p1.info());
        System.out.println(p2.info());
        System.out.println(s1.info());
        System.out.println(s2.info());
        
        Teacher t1 = new Teacher("D", "Professor");
        System.out.println(t1.info());
    }
}
我编译没有问题的,为什么不能运行呢?老是出现这样的错误:
Exception in thread "main" java.lang.NoSuchMethodError: Person.<init>(Ljava/lang 
/String;)V 
at TestStudent.main(TestStudent.java:34)

解决方案 »

  1.   

    貌似可以運行啊   
    我的結果 
    name: A location: beijing
    name: B location: shanghai
    name: C location: beijing school: S1
    name: C location: shanhai school: S2
    name: D location: beijingcapital Professor
      

  2.   

    咦,错误出现在TestStudent.java,给出的代码似乎是TestTeacher.java的。
      

  3.   

    是刚开始是TestStudent的,我是照着它,才在它的基础上加的呀,应该没有多大影响呀?
      

  4.   

    我是刚学者,用的是ultraEdit不是其它的编辑器,不知道你们用的是不是eclipse.反正用的我的这个编辑器不能运行的,我也不知道到底原因是什么?
      

  5.   

    用eclipse,UE只是一个文本编辑器,不是编译器,要通过设置才能运行,非常麻烦的。
      

  6.   

    public class TestTeacher n
    public 加在哪個class上面   這個.java文件的名字 就叫TestTeacher  就好了
      

  7.   

    class Person {
      private String name;
      private String location;  Person(String name) {
        this.name = name;
        location = "beijing";
      }
      
      Person(String name,String location) {
        this.name = name;
        this.location = location;
      }
      
      public String info() {
        return 
          "name: "+name+
          " location: "+location;
      }
    }class Student extends Person {
        private String school;
        Student(String name,
    String school) {
            this(name,"beijing", school);
        }
        Student(String n,String l
    ,String school) {
            super(n,l);
            this.school = school;
        }
        public String info() {
            return super.info()+
      " school: "+school;
        }
    }public class TestStudent {
        public static void main(String[] args) {
            Person p1 = new Person("A");
            Person p2 = new Person("B","shanghai");
            Student s1 = new Student("C","S1");
            Student s2 = 
                new Student("C","shanhai","S2");
            System.out.println(p1.info());
            System.out.println(p2.info());
            System.out.println(s1.info());
            System.out.println(s2.info());
        }
    }我把它改成专门测试学生的,可还是出现相同的错误,所以不是你们说的那样的!这和那好像没有关系的呀!
      

  8.   

    你是不是  运行时候写  JAVA TestStudent 啊?
    貌似应该是  java TestTeacher把
      

  9.   

    既然是用UE开发,那么有个问题,你的Person类的class文件是不是最新的啊?
    因为从报错来看,是Person这个类的构造函数有问题,不接受Person(String)这种形式。这个构造方法是不是后加的,后加以后,有没有再编译Person?试着把原来的class文件删除后,重新编译所有文件。
      

  10.   

    class Person { 
      private String name; 
      private String location;   Person(String name) { 
        this.name = name; 
        location = "beijing"; 
      } 
      
      Person(String name,String location) { 
        this.name = name; 
        this.location = location; 
      } 
      
      public String info() { 
        return 
          "name: "+name+ 
          " location: "+location; 
      } 
    } class Teacher extends Person { 
    private String capital; Teacher(String name, String capital) { 
    this(name, "beijing", capital); 
    } Teacher(String n, String l, String capital) { 
    super(n, l); 
    this.capital = capital; 
    } public String info() { 
    return super.info() + "capital " + capital; 

    } class Student extends Person { 
        private String school; 
        Student(String name, 
    String school) { 
            this(name,"beijing", school); 
        } 
        Student(String n,String l 
    ,String school) { 
            super(n,l); 
            this.school = school; 
        } 
        public String info() { 
            return super.info()+ 
      " school: "+school; 
        } 
    } public class TestTeacher { 
        public static void main(String[] args) { 
            Person p1 = new Person("A"); 
            Person p2 = new Person("B","shanghai"); 
            Student s1 = new Student("C","S1"); 
            Student s2 = 
                new Student("C","shanhai","S2"); 
            System.out.println(p1.info()); 
            System.out.println(p2.info()); 
            System.out.println(s1.info()); 
            System.out.println(s2.info()); 
            
            Teacher t1 = new Teacher("D", "Professor"); 
            System.out.println(t1.info()); 
        } 
    } 错误是这样的:Exception in thread "main" java.lang.NoSuchMethodError: Person.<init>(Ljava/lang
    /String;)V
            at TestTeacher.main(TestTeacher.java:58)
      

  11.   

    class Person { 
      private String name; 
      private String location;   Person(String name) { 
        this.name = name; 
        location = "beijing"; 
      } 
      
      Person(String name,String location) { 
        this.name = name; 
        this.location = location; 
      } 
      
      public String info() { 
        return 
          "name: "+name+ 
          " location: "+location; 
      } 
    } class Student extends Person { 
        private String school; 
        Student(String name, 
    String school) { 
            this(name,"beijing", school); 
        } 
        Student(String n,String l 
    ,String school) { 
            super(n,l); 
            this.school = school; 
        } 
        public String info() { 
            return super.info()+ 
      " school: "+school; 
        } 
    } public class TestStudent { 
        public static void main(String[] args) { 
            Person p1 = new Person("A"); 
            Person p2 = new Person("B","shanghai"); 
            Student s1 = new Student("C","S1"); 
            Student s2 = 
                new Student("C","shanhai","S2"); 
            System.out.println(p1.info()); 
            System.out.println(p2.info()); 
            System.out.println(s1.info()); 
            System.out.println(s2.info()); 
        } 
    }这个的错误是这样的:
    Exception in thread "main" java.lang.NoSuchMethodError: Person. <init>(Ljava/lang 
    /String;)V 
    at TestStudent.main(TestStudent.java:34)
      

  12.   

    这和那个什么文件名什么的应该没有问题,我现在想的是不是classpath的问题,可我以前用的时候是好好的呀,我刚学JAAV,这个错误我也不懂!
      

  13.   

    可以运行,这是我运行的结果,是不是你化境变量没设置好?
    E:\>javac TestTeacher.javaE:\>java TestTeacher
    name: A location: beijing
    name: B location: shanghai
    name: C location: beijing school: S1
    name: C location: shanhai school: S2
    name: D location: beijingcapital ProfessorE:\>
      

  14.   

    我现在是找出原因了,我写的程序是正确的,只不过我以前的文件里面有和它有点关系的其它的JAVA 文件,我以前编的其它程序,我是加建了一个文件夹的呀,反正我把以前的东西全删了结果就出来了,至于是什么原因,以后再慢慢想想吧!谢谢你们啦!