我刚开始使用Groovy,我正在尝试使用特征。下面我粘贴了www.programmingbydoing.com的学习练习,当我开始学习Java时,这些练习非常有用,所以我也使用了Groovy。我完成了这个课然后想,为什么我不扩展一个类而不是使用特征?如果有人能提供帮助,我很难过,在Groovy中扩展课程和实现特质之间的区别是什么?
class HowOldAreYou implements AskingAndAnswering {
/**
*
* @param args
*/
static void main(args) {
def name = AskName()
def age = AskAge(name)
if (age < 16) result "You can't drive yet $name"
if (age < 18) result "You can't vote yet $name"
if (age < 25) result "You can't rent a car yet $name"
else if (age > 25) result "You can do anything that is legal $name"
else result "That's an unusual age $name!"
}
/**
*
*/
trait AskingAndAnswering {
static def keyboard = new Scanner(System.in)
static String AskName() {
println "What is your name?"
def name = keyboard.next()
}
static int AskAge(name) {
println "\nOk, $name How old are you?"
int age = keyboard.nextInt()
}
static void result(answer) {println "\n $answer"}
}
}
答案 0 :(得分:0)
按规则,您只能扩展一个班级。使用traits,你可以使用`implements',类似于接口。你的'实施'的特征数量没有限制。
但是特性与界面不同,因为它包含完全实现的方法。 结果与组合非常相似,您可以根据需要通过简单地实现可重用的特征向现有类添加功能。
这种行为与提供“多重干扰”非常相似,因为您可以有效地“扩展”具有多个特征的类的行为,这可以类似于基类。
答案 1 :(得分:0)
Trait并非特定于Groovy。它是面向对象编程中的一个概念&#34;理论&#34;,很多语言实现了这个概念。
&#34;理论上&#34;,特质不是一个阶级。它并不代表&#34;事物&#34;,而是更多的&#34;能力&#34;或者&#34;行为&#34;。它是一组提供能力的方法和状态。
此功能可以应用于类(&#34; a&#34;),类可以具有多种功能(可以使用多种特性)。
在Groovy中,它是阶级和特质之间的主要实际差异(当然还有特征和阶级之间冲突的解决),但考虑特征的概念更为重要,它的技术实施。
所以,是的,如果你只有一个特质,你可以使用抽象类,但你应该记住你的特质是什么。