此 Java 代码的目的 - 对象创建

The purpose of this Java code - Object Creation

我想看懂下面的代码。是否有用于创建具有两个 classes 的对象的名称?我假设我会创建一个可以从 Animal class 调用 methods/variables 的 Deer 对象,但它似乎不起作用。为什么有人要在 Java 中创建这样的对象?

public class Animal {
   int J = 20;
}

public class Deer extends Animal {
    int Q = 40;
}

public void test() {
    Animal D = new Deer();
}

这称为继承,当您在 Java 中做任何与 OOP 相关的事情时,它非常有用。

您目前甚至 class 中都没有任何方法,因此您现在无法测试方法的工作原理。但是,如果您在动物 class 中添加了一个方法(例如 public void talk() {}),则可以使用 super.talk().

在 Deer class 中调用该方法

作为旁注,如果您将 class 声明为 public,它需要在其自己的单独文件中,否则您将遇到编译器错误。如果你想让所有的东西都在一个文件里,就把public.

这个词去掉

您可以访问 https://www.w3schools.com/java/java_inheritance.asp 以获取有关继承和 classes 的更多信息。

当您需要重复使用代码并从 classes 获取信息时,这会很有帮助,例如,class ANIMAL and subclasses Dog, Cat, Monkey, 等等。 归根结底,它们都是动物,吃,运行,睡觉,但更深层次的是,它们每个人都有独特的行为,猫可以吃,也可以喵,狗可以运行 但它也会吠叫。 所以他们有独特和相似的动作要执行。 继承是重用父级现有代码的好方法 class。 您可以查看继承文档。 Inheritance

首先我发现问题描述太短了。所以尝试纠正它。 这种类型的 class 创建是称为继承的东西的一部分,它在

时提供帮助
  1. 我们不想提供子函数的访问权限class。(因此我们的基 class 充当包装器。)
  2. 重写baseclass的功能。这样当调用 baseclass 函数时,它的行为就像调用了 subclass 函数一样。

举个例子

public class MyClass {
    public static void main(String args[]) {
    Animal D = new Deer();
    System.out.println(D.getType());
    
    }
    
    public static class Animal{
        String Type="Animal";
        public String getType(){
           return Type;
        }
    }
    
    public static class Deer extends Animal{
        String SubType="Mammal";
        public String getType(){
           return SubType;
        }
        public String eatgrass(){
            return "eatgrass";
        }
    }
     public static class Bird extends Animal{
        String SubType="bird";
        public String getType(){
            return SubType;
        }
        public String fly(){
            return "flying";
        }
     }
}

在上面的例子中。

  1. 我们可以看到并不是所有的动物都吃草,所以我们想隐藏这个细节,只使用所有动物对象共有的函数,在本例中是 getType()

  2. 我们想要 D.getType() 到 return 最接近动物图表中的 class 鹿名称的类型,即“哺乳动物”。因此,当我们调用 D.getType() 而不是像您在代码中期望的那样得到“动物”时,我们将得到“哺乳动物”