【问题标题】:passing values from subclass of a subclass in java从java中的子类的子类传递值
【发布时间】:2017-09-08 01:16:54
【问题描述】:

例如,我有这个代码,我有一个超级抽象类动物和一个抽象子类鸟,以及鸟 AmericanRobin 的子类,我想在美国知更鸟中填充数据以从动物创建对象鸟,但我没有知道怎么做,因为我想创建另一个名为家养金丝雀的鸟子类,并将值从他的构造函数传递给他的超类构造函数来创建一个对象,有什么建议吗??

public abstract class Animal {// SuperClass animal

    private String Kind,Appearance;

    Animal(String Kind,String Appearance) {
        this.Kind = Kind;
        this.Appearance = Appearance;
    }

    public abstract void eat();
    public abstract void move();

    @Override public String toString() {
        return "("+Kind+","+Appearance+")";
    }

    public abstract class Bird extends Animal {//SubClass of superClass Animal 

        Bird(String Kind, String Appearance) {
            super(Kind, Appearance);
        }

        @Override public void eat() {

            System.out.println("Eats seeds and insects");
        }

        @Override public void move() {
            System.out.println("Flies throught the air");
        }
    }

    public  abstract class Fish extends Animal{//SubClass of SuperClass Animal

        Fish(String Kind, String Appearance){
            super(Kind,Appearance);
        }

        @Override public void eat() {
            System.out.println("Eats krill, algae and insects");
        }

        @Override public void move() {
            System.out.println("Swims throught the water");
        }
    }

    //== Here the pain begins ==
    public class AmericanRobin extends Bird    {

        AmericanRobin(String Kind, String Appearance) {
            super(Kind, Appearance);
        }            
    }

    public class DomesticCanary extends Bird{

        DomesticCanary(String Kind, String Appearance) {
            super(Kind, Appearance);

        }
    }
}

【问题讨论】:

  • 什么不适合你,请解释一下。你会得到什么错误,或者你的预期与实际输出是什么。
  • 创建与鸟类一样多的类是一种矫枉过正的做法。您应该创建Animal americanCan=new Bird("American Canary","Brownish may be")Animal domesticCan=new Bird("Domestic Canary", "Very colourful") 等...如果需要添加另一个数据成员/变量说genus 可能是(与kindappearance 一起)
  • 嗯,这是一个练习,我有一个抽象的主类和其他抽象类的动物,动物->鸟和鱼->鸟和鱼的种类。通过声明 Animal、Bird、Fish、AmericanRobin、DomesticCanary、RainbowTrout 和 SockeyeSalmon 类来模拟动物层次结构的一部分:

标签: java inheritance abstract


【解决方案1】:
  1. 请重命名变量以区别于类名。 kindappearance 是更好的名称。

  2. 要测试您的继承结构,请尝试创建子类的实例并调用它继承的方法,在您的情况下:

    AmericanRobin americanRobin = new AmericanRobin("kind","appearance");
    System.out.println(americanRobin.toString()); // inherited from Animal
    

【讨论】:

  • 看起来我明白,但逻辑是这样的......我有一个主要的抽象类动物,它有 2 个字符串种类和外观,然后我有另一个抽象类,叫做鸟和鱼,最后是物种类美国知更鸟和国内金丝雀 this 在他们的构造函数中具有和 empy 值的想法是像这样传递这些参数: SockeyeSalmon 是公共的,扩展了 Fish,并声明了一个公共无参数构造函数,该构造函数传递“sockeyesalmon”和“bright red with a green head " 到它的超类构造函数。这是继承的练习
  • 所以子类 SockeyeSalmon 将他的参数通过他的构造函数传递给他的超类鱼构造函数(鱼传递给动物),我在这个例子中使用 getKind 和 apareance 字符串值来做到这一点 public class SockeyeSalmon extends Fish{ SockeyeSalmon(String Kind, String Appearance){ super(Kind,Appearance); } public String getKind() { return"SockeyeSalmon"; } 公共字符串 getAppearance() { 返回“描述”; } }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-25
  • 2013-07-08
  • 1970-01-01
  • 2018-03-29
  • 2013-10-19
  • 1970-01-01
  • 2013-02-16
相关资源
最近更新 更多