package com.meng.nan.day716
/**
- scala内部类(嵌套类)
*/
object ScalaDemo {
def main(args: Array[String]): Unit = {
val outher=new Outher
val inner=new outher.Inner
inner.show()
}
}
//成员内部类
class Outher{ oo=> //外部类的引用
var x=5;
class Inner{
var x=6
def show(){
var x=7
println(“inner:x=”+x)//7
println(“inner:x=”+this.x)//6
println(“inner:x=”+Outher.this.x)//5
println(“inner:x=”+oo.x)//5
}
}}
scala的协变与逆变
. 协变和逆变
在默认情况下,scala也不允许出现上述泛型继承的现象。
但是非常灵活的scala,在特殊情况下是允许这些情况的方式,也就是对应的协变和逆变。在定义泛型的时候,添加一个符号即可[+T]协变,[-T]逆变。
协变指的是等号左侧的泛型是右侧的超类,逆变指的是等号左侧的泛型是右侧的子类。
多用于集合的操作。
举例:
object _03GenericOps {
def main(args: Array[String]): Unit = {
val list:MyList[Object] = new MyListPerson
val list2:MyList2[Person] = new MyList2[Object]()
val list3:List[Object] = List[Person]()
}
}
class MyList[+T] { //把这种泛型的继承称之为协变
}
class MyList2[-T] {//把这种泛型的继承称之为逆变
}
/**
* implicit转换的关键字
* * 把被implict关键字所修饰的函数,称之为隐式转换函数
* * 函数的命名风格:source2Target
* 类的命名:
* 1、首字母大写,而且多单词要驼峰
* 2、尽量都是名词,而且是单数形式
* 3、不要出现一些中文特殊字符
* 方法或者函数的命名:
* 1、首字母小写,而且多单词要驼峰
* 2、动宾短语(动词+名词)
* 3、不要出现一些中文特殊字符
* 不到万不得已,千万不要使用汉语拼音。
*/
def implicitOps1: Unit ={
implicit def str2Int(str:String):Int=str.length
val str:Int=“asdfgh”
//转换
implicit def person2Int(person: Person):Int=person.getAge
val p:Int=new Person()
}