Scala特性-如何实现方法

Scala特性-如何实现方法,scala,interface,traits,Scala,Interface,Traits,如何从人员特征(界面)中正确扩展和实施方法发送电子邮件,以便main执行: trait Person { var name:String var gender:Char def sendEmail(subject:String, body:String) } object Employee extends Person { def main(args: Array[String]): Unit = { println("Hello") sendEmail("a

如何从
人员
特征(界面)中正确扩展和实施方法
发送电子邮件
,以便main执行:

trait Person {
  var name:String
  var gender:Char
  def sendEmail(subject:String, body:String)

}

object Employee extends Person {
  def main(args: Array[String]): Unit = {
    println("Hello")
    sendEmail("a", "b")

    def sendEmail(subject:String, body:String): Unit = {
      println("subject" + body)
    }

  }
}

方法需要是对象的成员,而不是另一个函数(main)中的函数。尝试:


方法需要是对象的成员,而不是另一个函数(main)中的函数。尝试:


您需要实现trait
Person
中声明的所有成员和方法。此外,假设您有多个员工,
(或
案例类
)可能比
对象
更合适:

trait Person {
  val name: String
  val gender: Char
  def sendEmail(subject: String, body: String): Unit
}

class Employee(val name: String, val gender: Char) extends Person {
  def sendEmail(subject: String, body: String): Unit =
    println(s"subject: $subject\n   body: $body")
}

object ListEmployees {
  def main(args: Array[String]) {
    val emp1 = new Employee("Dave", 'M')
    val emp2 = new Employee("Jenn", 'F')

    emp1.sendEmail("yo", "yo yo yo")
    emp2.sendEmail("boo", "boo boo boo")
  }
}

ListEmployees.main(Array())
// subject: yo
//    body: yo yo yo
// subject: boo
//    body: boo boo boo

您需要实现trait
Person
中声明的所有成员和方法。此外,假设您有多个员工,
(或
案例类
)可能比
对象
更合适:

trait Person {
  val name: String
  val gender: Char
  def sendEmail(subject: String, body: String): Unit
}

class Employee(val name: String, val gender: Char) extends Person {
  def sendEmail(subject: String, body: String): Unit =
    println(s"subject: $subject\n   body: $body")
}

object ListEmployees {
  def main(args: Array[String]) {
    val emp1 = new Employee("Dave", 'M')
    val emp2 = new Employee("Jenn", 'F')

    emp1.sendEmail("yo", "yo yo yo")
    emp2.sendEmail("boo", "boo boo boo")
  }
}

ListEmployees.main(Array())
// subject: yo
//    body: yo yo yo
// subject: boo
//    body: boo boo boo

这是一个很好的捕获,但仍然不起作用:
Error:(10,8)不可能创建对象,因为:它有2个未实现的成员。/**从object Employee可以看出,缺少的签名如下。*为方便起见,它们可用作存根实现。*/def性别=(x$1:Char):单位=???def名称=(x$1:String):单位=???对象Employee扩展Person{
您还需要实现
name
gender
,类似于
var name=“Joe”
和类似于
gender
的东西应该足够了,这是一个很好的捕获,但仍然不起作用:
错误:(10,8)不可能创建对象,因为:它有2个未实现的成员。/**从object Employee中可以看出,缺少的签名如下。*为了方便起见,这些签名可用作存根实现。*/def-gender_=(x$1:Char):Unit=???def-name_=(x$1:String):Unit=???object Employee扩展Person{
您还需要实现
name
gender
,类似于
var name=“Joe”
和类似的
gender
应该足够了。您需要在扩展类中实现trait的所有抽象成员。您需要在扩展类中实现trait的所有抽象成员。此行的目的是什么
ListEmployees.main(Array())
?(没有它也可以工作)它不是代码的一部分,而是一个用于在上运行测试的命令。
ListEmployees.main()
。此行的目的是什么
ListEmployees.main(Array())