匿名内部类
scala> class Person(protected val name:String){
| def sayHello="hello i am "+name
| }
defined class Person
scala>
scala> val p = new Person("tomcat"){
| override def sayHello="hiiiiiiii "+name
| }
p: Person = $anon$1@6cf47d05
scala>
scala>
scala> def greeting(p:Person{def sayHello:String}){
| println(p.sayHello)
| }
greeting: (p: Person{def sayHello: String})Unit
scala>
scala> greeting(p)
hiiiiiiii tomcat
----------------------------------
抽象类
scala> abstract class Student(val name:String){ def sayHello:Unit}
defined class Student
scala> :paste
// Entering paste mode (ctrl-D to finish)
class SmallStudent(name:String) extends Student(name){
def sayHello {println("hello -- "+name)}
}
// Exiting paste mode, now interpreting.
defined class SmallStudent
scala>
scala> var ss = new SmallStudent("tomcat")
ss: SmallStudent = SmallStudent@7e762feb
scala> ss.sayHello
hello -- tomcat
----------------------------------
父类中定义了 field 但没有给出初始值 则为抽象field
子类必须定义改 field 不需要使用 override 关键字
scala> abstract class Person{ var name:String}
defined class Person
scala> class Student extends Person {
| var name:String="tomcat"
| }
defined class Student
scala>
scala> var s = new Student
s: Student = Student@3178f903
scala> s.name
res11: String = tomcat