30秒教你了解内部类

class Student{
  var age=18 //属性
  def say ():Unit={//方法

  }
  //内部类:定义一个在类里面的类
  class Book{
    //微信读书《历史的温度》
    var bookName="Scala程序设计"
  }
}
object Test19 {
//如何使用内部类 格式:
// 对象1=new 外部类()
  //对象=对象1.内部类()
def main(args: Array[String]): Unit = {
  val s1=new Student()
  val book1=new s1.Book()
  println(book1.bookName)
}

}

 为什么使用内部类

class Car1 {
  //私有成员:速度
  private var speed = 100
  var color = "red"

  //内部类,可以访问类的私有成员用它来操作类的私有成员封闭性更好!
  class Engin(var maxSpeed: Int) {


    //加速
    def acc(): Unit = {
      speed += 10
      if (speed > maxSpeed) {
        speed = maxSpeed
      }
      println("speed", speed)
    }


    //减速 to do:最小速读为0
    def sub(): Unit = {
      speed -= 10


    }
  }

  override def toString: String = {
    s"当前速度为${speed}"

  }
}

  //减速
  object Test19_1 {
    def main(args: Array[String]): Unit = {
      val c = new Car1()
      var engin = new c.Engin(120)
      engin.acc()
      engin.acc()
      engin.acc()
      println(c)
      engin.sub()
      println(c)
    }

  

}

内部对象
(就是定义在class内部的object)

定义格式:class类名(object对象名{属性:方法()})

class Car3(var r:Double){
  //属性
  //方法
  //内部类
  //内部对象
  object util{
    val PI=3.14

    def getArea():Double = {
      PI*r*r
    }
    def getL():Double={
      2*PI*r
    }
  }
}
object Test19_2 {
  def main(args: Array[String]): Unit = {
    val car=new Car3(12)
    val res=car.util.getL()
    println(res)
  }
}

匿名类

class Car5{
  var color="white"
  def run():Unit={
    println("run...")
  }
}
object Test19_3 {
  def main(args: Array[String]): Unit = {
//    var car=new Car5()
//    car.run()
    //匿名类!没有名字的类
    //特点
    //1.没有名称
    //2.代码不能重用只能用一次如果需要创建新对象则需要重新写一遍
    var car1=new {
      var color="white"
      def run():Unit={
        println("run...")
      }
    }
    var car2=new{
      var color="white"
      def run():Unit={
        println("run...")
      }
    }
    car1.run()
  }

}

train特质(抽象类 多继承)

//定义trait
//不是类,不能实例化
//2.它的构造器不能带参数:即:不能添加()
trait Shentihao{
  //abstract class Shentihao{}

  var KM_1=5
  //抽象属性
  var sports:String
  def say():Unit={}
  //抽象方法
    def run
    //具体方法
  }

  //抽象方法
//特质
class Student1 extends Shentihao{
  var sports="跳绳"
  def run():Unit={
    println("1000m在4,5分钟内跑完")
  }
}
object Test20 {
  def main(args: Array[String]): Unit = {
    val s1=new Student1 ()
    //s1.
  }
}

多继承

//多继承
//美貌
trait Beauty{
val leg:Double
}
trait Wisdom{
val EQ:Int
}

//一个类实现了两个特质用with隔开
//多个特质可以交换顺序
class Girl extends Beauty with Wisdom{//Girl实现所以trait中的抽象成员
  val leg=180
  val EQ=180
  override def toString:String=s"leg=${leg},eg=${EQ}"
}
object Test20_1 {
  def main(args: Array[String]): Unit = {
    val girl=new Girl()
    println(girl)

  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值