package com.uplooking.bigdata.p3
/**
* 匿名内部类
*/
object ExtendsOps2 extends App {
val p = new Person2("小美")
p.sayHi
//给Person2动态添加一个功能,吃饭,使用到了匿名内部类的方式进行操作
val pp = new Person2("姚美丽"){
def eat = println("姚美丽在开心的和老李共度烛光晚餐,但是中间有个坑爹黄前华")
//还可以对之前定义的方法进行复写
override def sayHi: Unit = println("hello " + this.name + ", 哥仰慕你已经很久了,给个面子,叫我一声哥~")
/**
* 这里调用Person2的属性的时候不能使用super关键字,为何?
* 因为,虽然我们可以将pp当做Person2的子类来看待,但是实质我们还是用过Person2来创建的对象
* 那么这个时候,我们再去使用super关键字,super到底只想的谁,不清楚,
* 所以不能使用super关键字,但是可以使用this
*/
}
//创建的这个pp就相当于Person2的一个子类对象
pp.sayHi
pp.eat
}
class Person2{
var name:String = ""
def this(name:String) {
this()
this.name = name
}
def sayHi = println("您好," + name + "! 欢迎光临鄙舍~")
}
/**
* 匿名内部类
*/
object ExtendsOps2 extends App {
val p = new Person2("小美")
p.sayHi
//给Person2动态添加一个功能,吃饭,使用到了匿名内部类的方式进行操作
val pp = new Person2("姚美丽"){
def eat = println("姚美丽在开心的和老李共度烛光晚餐,但是中间有个坑爹黄前华")
//还可以对之前定义的方法进行复写
override def sayHi: Unit = println("hello " + this.name + ", 哥仰慕你已经很久了,给个面子,叫我一声哥~")
/**
* 这里调用Person2的属性的时候不能使用super关键字,为何?
* 因为,虽然我们可以将pp当做Person2的子类来看待,但是实质我们还是用过Person2来创建的对象
* 那么这个时候,我们再去使用super关键字,super到底只想的谁,不清楚,
* 所以不能使用super关键字,但是可以使用this
*/
}
//创建的这个pp就相当于Person2的一个子类对象
pp.sayHi
pp.eat
}
class Person2{
var name:String = ""
def this(name:String) {
this()
this.name = name
}
def sayHi = println("您好," + name + "! 欢迎光临鄙舍~")
}