【问题标题】:Abstraction clarification. Java抽象澄清。爪哇
【发布时间】:2013-12-25 00:01:15
【问题描述】:

您好,我刚刚学习了抽象,正在寻找一些说明。

1 - 使用抽象方法能够通过静态类型检查而无需实际实现该方法的唯一原因是什么?是否还有其他原因让人们想要将方法抽象化?

2 - 如果您创建了一个抽象方法并在其中包含一些代码,您将如何在子类实现中“添加”该代码。你会继续打字吗?我只在示例中看到过空的抽象方法。

如果这些问题有点基本,谢谢和抱歉。

【问题讨论】:

  • 通过静态类型检查而无需实际实现方法是什么意思?另外,阅读abstract 类的教程。
  • 我的演讲幻灯片中的实际引用是“抽象方法允许静态类型检查而不需要实现。”我理解的意思是,如果您在对象类型是“超类”时调用对象上的方法,它不会给您错误。

标签: java class abstract


【解决方案1】:

抽象类,就像接口一样,允许你在你(你的类)和你的用户(你的类的用户)之间指定一种契约。与接口的区别在于你还可以提供一些行为,即你可以实现一些方法而将其他方法留空,即抽象。

抽象方法总是空的——这就是抽象的意思。抽象类的子类型可以通过自己实现方法来改变在抽象父类中实现的方法的行为。他们可以通过首先调用父级的方法来重用父级的代码——就像你对构造函数所做的那样。

【讨论】:

  • 抽象的如何“调用父方法”?
  • 可以调用父类的非抽象方法。父类是抽象的,但包含一个实现的方法。
  • “抽象类的子类型可以通过自己实现方法来改变抽象父类中实现的方法的行为。它们可以通过首先调用父类的方法来重用父类的代码” - 可能只是有些不幸措辞,但就我而言,这显然听起来好像您建议通过首先调用抽象父类的方法来重用。
  • 好吧,也许我的措辞真的很不幸。您能提出改进建议吗?
  • 就个人而言,我根本不会写关于抽象方法的调用方法。我不明白你想说什么,所以我不确定如何改进它。强调只有非抽象方法可以被类的孩子调用或者根本不写它,也许。
【解决方案2】:

在 1:抽象方法是一种向扩展您的代码的程序员建议的方式,即“应该在您的代码中实现这样的方法”。例如,这可用于在一些更大的系统中预先设计界面。

在 2 点:是的。在实现某些抽象类的子类时,您不仅限于“父”类的方法和字段。

【讨论】:

  • 请注意,抽象方法不能有主体(问题 2 是关于)。
  • 抽象类,就像接口一样,允许你在你(你的类)和你的用户(你的类的用户)之间指定一种契约。与接口的区别在于你还可以提供一些行为,即你可以实现一些方法而将其他方法留空,即抽象。
  • 当然可以,但是使用正确的命名、返回类型和参数,您可以给出一些建议,对吧?例如,您可能有抽象类 Figure,包括抽象方法 area(),要在其继承者中实现。
  • 这就是为什么我们称它为“抽象”,因为它没有做任何事情,只是提出一些解决方案/设计。
  • 这就是它最常用的方式,说实话,我看不出它还有什么用处。接口只包含抽象方法,因此它们只建议未来的实现/扩展。抽象类可能包含抽象方法以及标准的非抽象方法,因此它们既可以建议未来的实现,又可以同时实现某些功能(尽管在不同的方法中)。请注意,包含至少一个抽象方法的类必须声明为抽象,即使所有其他方法都是非抽象的。
【解决方案3】:

1 - 抽象类旨在由常规类扩展。因此,通过拥有抽象方法,它强制在扩展抽象类的类中实现抽象方法,但是,它也让程序员可以控制它应该如何实现。假设 Lion 类和 Dog 类都扩展了 Animal 类。假设 Animal 类有 run() 方法。狮子和狗都可以跑,但跑的方式、跑的速度不同。因此,通过使 run() 抽象,您可以专门为 Lion 和 Dog 类定义 run()。

2 - 抽象方法不能有方法体或内部的任何代码。 例如:抽象 void run(); 注意 run() 之后没有开始和结束大括号;

【讨论】:

    猜你喜欢
    • 2013-03-26
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 2013-03-11
    • 2011-01-07
    • 1970-01-01
    相关资源
    最近更新 更多