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文件
然后根据Person.java、Eigenschaften.java和PersonDetails.java的顺序分别编译这三个类

编译后运行主类

java个人信息

然后,您可以将结果输出作为

埃米尔:Eigenschaften@15db9742更改22姓名:Emil Gr???e 18


老实说,对于您编写的代码,您的代码肯定会显示编译错误

查看下面的代码。确保遵循编码标准,因为类名应以大写字母开头

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);