2012-10-18 82 views
0

我有兴趣了解如何使用单个printf语句或@Override toString()方法来提供准确的信息,当可能需要引用不同的子类时它。使用相同的toString()来访问不同的子类变量

下面是示例程序设置:

类动物 - 字符串名称 - INT年龄 类鸟扩展动物 - 私人诠释羽毛 - 动物animalObj //引用动物对象瓦尔 类猴动物延伸 - private int weight - 动物animalObj //引用动物对象变量 类树 - int heightInFeet - Animal animalInTree //引用实例化的动物对象

类树具有“boolean inTree()”方法,如果true表示动物在树上 类树有2个更多的方法... 公共动物nowInTree() 公共动物hasLeftTree()

每一种方法都需要一个println或printf语句,列出动物的charastics以及......这里的渔获物,鸟类有一个PARAM INT羽毛和猴类有一个参数的双重。

我输出到控制台称为窗体树类应该等于类似...“名为Falcon的鸟,3岁,有912根羽毛,已经离开了树。

然后使用SAME方法或甚至相同的printf语句也可以打印到控制台......“名为布巴的猴子是9岁,体重22.5磅,它的体重已经离开了树。

可能printf语句(假定创建超和子类方法 - 尽管这是不完整=

System.out.printf(“动物命名%S谁是%d岁$ s已离开树”, (),animalObj.getAnimalName(),animalObj.getAge(),wtfGoesHere.callMeth(),);

好吧,注意我需要从每个wtfGoesHere()方法代表的子类中获取var wtfGoesHere必须返回不仅重量或羽毛,而且还附加额外的信息......所以不仅仅是重量,而且“它的重量是%d”

体重和羽毛变种必须是私人的。虽然如果publis能解决它吗?如果是,那仍然是有风险的编码?我仍然是一个小孩,但有时在私人医院里工作是在扯我的屁股。

由于编译器当前知道动物类中的信息,但不知道猴子和鸟的子类,所以我很难过。我可以为子类中的信息创建一个getBlaBla(),但无法弄清楚如何告诉Java何时使用哪一个。

可能的想法...

  1. 进行异常处理,并在printf的方法添加一个额外的PARAM,当它击中的那场将使用一个它可以和扔在其他异常。 ..如果可能我还不知道表达式,我在高级java类中,那是一个月。作业“暗示”它不允许异常处理。 (虽然我很好奇,如果这将工作)

  2. 创建某种形式的级联“if else”,它将确定哪个子类是需要的,然后。仍然存在问题,因为我限制的方法不包括传递子类对象......只接受Animal类作为在Tree类中传递的对象参数。

  3. 使用Tree类的toString()覆盖方法来处理这个......尽管我仍然碰到了上面的#2。

  4. 我们了解了absract类和“implements”函数 - 因此,如果这能解决我的问题,只要hasLeftTree()方法可以处理两个子类的可能性,如果我没有具体说明hasLeftTree()方法专门调用一个打印语句给出子类的所有信息,包括它的动物扩展信息。

我提到上面的内容,试图说明我在这方面已经有了一些想法,而不仅仅是抱着抱怨。另外,尽管我的老师有上面的限制,有时... ...宣布他希望我们找到在课堂上没有具体提及的功能......所以...如果您相信适当的行业接受标准需要下达指示我会向我的教授辩论。

如果需要,我会提供更多的代码。其他所有的程序在由4个文件组成的程序中... 3个类和主要方法文件。

想法?和TYVM预先编码神。

+0

您需要正确设置代码和问题的格式,以便我们能够更好地为您提供帮助。 –

回答

0

我解决这个问题的理解是,通过多态性返回超类java的toString方法时,会查看子类以查看是否存在toString方法的“更好的版本”...因为我的对象是一个子类对象,当我调用超类toString它会看到子类对象,然后查找子类,看看是否有一个相同的方法...在这种情况下“toString”,当它找到它时,它使用该medhod来代替。通过这样做,所有适当的信息被返回到打印报表等。

相关问题