1.1 封装
在Java中:属性私有化,只能通过被授权的方法才能对数据进行操作
-  Scala中的public属性,底层实际为private,并通过get方法 ( obj.field ) 和 set方法( obj.field=value )对其进行操作——在Scala中并不推荐将属性设为private,再给它设置public的set和get方法的做法
```scala
object Test07_Demo {
  def main(args: Array[String]): Unit = {
} }var person = new Person()person.setName("zs")person.printDec()
 
class Person{ private var name:String = _
def setName(name:String): Unit ={ this.name = name }
def printDec(): Unit ={ println(s”name = $name , age = $age”) } }
<a name="LATnj"></a>###<a name="qrqU5"></a>### 1. 访问权限- [x] 默认为public,同包下- [x] protected,除了自身就只有子类可以访问- [x] private,只能在类的内部或者伴生对象中可用- [x] private[包名]增加包访问权限,包名下的其他类也能使用<a name="Kj1e7"></a>### 2.创建对象```scalaval | var 对象名 [:类型] = new 类型()
1. val : 引用对象地址不能再改变1. var: 可以修改引用对象的地址1. 自动推导变量类型不能多态,所以多态需要显示声明
3.构造器
主构造器:只能有一个 辅助构造器:可以有多个(重载)
class Person2(var name:String,var age:Int){ //主构造器 public Person2( String name,int age ){.....}println("构造方法被调用")}class Person3{ //相当于是空参的构造器 public Person3(){ }var name:String = _var age:Int = _def this(age:Int){ //辅助构造器this() // 必须调用主构造器(注意:主构造器是唯一的,只有一个)this.age = age}def this(name:String){ //辅助构造器this()this.name = name}def this(name:String,age:Int){ //辅助构造器this(name) //可以直接调用上面声明的辅助构造器,因为上面的辅助构造器也有调用主构造器this.age = age}}object Test02_Demo {def main(args: Array[String]): Unit = {var p = new Person2("zs",18)var p2 = new Person3("zs")println(p2.name)}}
构造器参数:未修饰(局部变量:构造方法中的一个变量)、var(成员变量)、val(成员常量)
未修饰
class Person3(name:String, age:Int){ //有参构造器var name:String = namevar age:Int = age}
var
class Person3(var name:String,var age:Int){ //有参构造器 并且 声明成员变量var habbit:String = _def this(name:String, age:Int,habbit:String){ //辅助构造器this(name,age) // 必须调用主构造器(注意:主构造器是唯一的,只有一个)this.habbit = habbit}}
1.1 继承
子类继承父类的属性和方法,单继承
子类需要在主构造器中调用父类的主构造器
class Person(var name:String){println("父类主构造器")}class Student(var name:String) extends Person(name){println("子类主构造器")}
指定调用父类方法( super[父类名] )
trait Father1{def xixi(){}}trait Father2{def xixi(){}}class sun extends Father1 with Father2{def xixi(){super[Father2].xixi()}}
1.2 多态
编译看左边 (编译检查) ,运行看右边(动态绑定) Scala中的属性和方法都是 动态绑定
类型检查 :var isTrue : Boolean = obj.isInstanceOf[T]
向下转型 :var obj : T = obj.asInstanceOf[T]
object Test04_Demo {def main(args: Array[String]): Unit = {var s:Student1 = new Student1()var t:Teacher1 = new Teacher1()var sp:Person9 = new Student1()var p:Person9 = new Person9()println("student is person4="+ s.isInstanceOf[Person9]) //trueprintln("teacher is person4="+ t.isInstanceOf[Person9]) //trueprintln("person4 is student="+ sp.isInstanceOf[Student1])//trueprintln("person4 is student="+ p.isInstanceOf[Student1]) //fasleif(sp.isInstanceOf[Student1]){var ss = sp.asInstanceOf[Student1]println(ss.name)}}}class Person9{def say(): Unit ={println("hello")}}class Student1 extends Person9{var name:String = "zs"override def say(): Unit = {println("hello,student")}}class Teacher1 extends Person9{override def say(): Unit = {println("hello,teacher")}}
