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)
}
}