Java中的extensiv函数
我得到了以下错误:Java中的extensiv函数,java,inheritance,Java,Inheritance,我得到了以下错误: Exception in thread "main" java.lang.Error: Unresolved compilation problems: groeße cannot be resolved or is not a field geschlaecht cannot be resolved or is not a field groeße cannot be resolved or is not a field 我试
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
groeße cannot be resolved or is not a field
geschlaecht cannot be resolved or is not a field
groeße cannot be resolved or is not a field
我试图根据其他用户的评论修复它。现在emil
是一个Eigenschaften
新错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
No enclosing instance of type QuizFrage is accessible. Must qualify the allocation with an enclosing instance of type QuizFrage (e.g. x.new A() where x is an instance of QuizFrage).
at QuizFrage.main(QuizFrage.java:5)
在这种情况下,只需要为子类Eigenschaften添加一个构造函数,并从中创建对象。我的修改:
- 同时将这三个文件另存为单独的java文件
老实说,对于您编写的代码,您的代码肯定会显示编译错误 查看下面的代码。确保遵循编码标准,因为类名应以大写字母开头
public class Test {
public static void main(String[] args) {
Eigenschaften Emil = new Eigenschaften();
Emil.name = "Emil";
Emil.alter = 22;
Emil.groeße = 18;
Emil.geschlaecht = "maennlich";
System.out.println("Emil: " + Emil + " Alter " + Emil.alter + " Name: " + Emil.name + " Größe :" + Emil.groeße);
}
}
class Person{
public String name;
public byte alter;
}
class Eigenschaften extends Person {
public byte groeße;
public String geschlaecht;
Eigenschaften(){
}
}
你已经得到了一些答案,但我想我会给你一些额外的提示 (1) 类名始终带有大写字母。因此,您没有类
person
,而是person
(2) 在我看来,每个文件实现一个类是更好的方法,因此我将创建一个目录,其中包含一个文件Person.java
,仅包含类Person
,依此类推。当然,您也可以使用内部类,它们可能有意义,但不适用于这段开始代码
(3) 不要用德语编程。我们有这些奇怪的字母ä,ö,ü,ß,它们在英语中是未知的,在终端上打印时会给你一些难看的问号或其他未知的符号。此外,在访问字段时,这可能会导致一些奇怪的效果。所以请使用英语
(4) 我认为你在这一点上对OOP的理解是错误的Eigenschaften
(对于Stackoverflow上的所有英语母语人士:Properties
)不是person的子类,因为它没有意义。例如,OOP有一个超类Animal
,然后有子类Dog
,Cat
,Bird
等等。现在所有类型的动物都有相同的行为。例如,他们都会说话。一只狗吠叫,一只猫叫唤,一只鸟做其他事情:我不知道这个英文词
然后你会有一个这样的结构:
public interface Animal {
public void makeSound();
}
// For example for the dog:
public class Dog implements Animal {
public void makeSound() {
System.out.println("Woof");
}
}
public class Person {
public String name;
public byte age;
public byte size;
public String gender;
//Constructor, getters, setters, toString
}
在本例中,我使用了一个接口。也可以只使用普通类或抽象类。这取决于你的需要
所以在你的情况下,你会有一个像这样的班级成员:
public interface Animal {
public void makeSound();
}
// For example for the dog:
public class Dog implements Animal {
public void makeSound() {
System.out.println("Woof");
}
}
public class Person {
public String name;
public byte age;
public byte size;
public String gender;
//Constructor, getters, setters, toString
}
(5) 最后一项改进是:
您不需要这样写:
System.out.println(“Emil:+Emil+“Alter”+Emil.Alter+“Name:+Emil.Name+“Größe”+eml.groeße”)
只需在类Person
中实现一个toString方法。然后可以将此命令简化为
System.out.println(emil);
其中,
emil
是类型为Person
的对象。toString方法将自动使用。一个Eigenschaften
是一个人
,但是人
不是Eigenschaften
,因此人
没有Eigenschaften
的字段。你可能想声明Emil
(应该是Emil
,顺便说一句)为Eigenschaften
,而不是person
(应该是person
顺便说一句)我照你说的做了,但我也犯了同样的错误请你提问,说明你做了什么,因为如果你照我说的做,你就不会犯同样的错误。此外,您得到的错误意味着您运行您的程序,即使它最初没有编译。几乎没有理由这么做。先编译。新的错误是因为这些内部类需要是静态的。看见或者,按照答案中的建议,将它们放在QuizFrage
类之外。顺便说一句,stackoverflow并不能代替学习自己在搜索引擎上搜索错误。请查看Sry,但随后出现错误:无封闭实例谢谢D
System.out.println(emil);