scala中的抽象类

23 阅读2分钟

一:理解抽象类:

类本身就是对对象的抽象,抽象类就是对类的抽象,就是一种更加模糊的类。

定义:抽象类是一个包含一个或多个的类。抽象方法是不带任何实现的方法。抽象类也可以包含具体的方法和属性。

目的:抽象类的主要目的是为子类提供公共的接口和部分实现,并确保子类实现抽象方法。

二:定义抽象类:

定义抽象属性:var|val 属性名:类型 一个属性没有初始化,没有值

定义抽象方法:def 方法名():String 只声明没有实现方法。

package txy

object Demo14 {
  def main(args: Array[String]): Unit = {
    abstract class sc() {
      var sex:String
      var age:Int
      var iq:Int
    }
    class shenchong extends sc{
      var sex:String ="男"
      var age:Int = 19
      var iq:Int = 30
    }
    //var sc1 = new sc -----报错
    var sc1 = new shenchong
    println(sc1.iq)
    println(sc1.sex)
    println(sc1.age)
  }
}

三:继承抽象类:

子类继承了抽象类,它就必须去实现所有抽象属性和抽象方法

package txy

object Demo14 {
  def main(args: Array[String]): Unit = {
    abstract class sc() {
      var sex:String
      var age:Int
      var iq:Int
      def add():Unit
      def get()= {
        println(s"沈冲的iq为${iq}")
      }
    }
    class shenchong extends sc{
      var sex:String ="男"
      var age:Int = 19
      var iq:Int = 30
      def add(): Unit = {
        iq *= 2
        println(s"沈冲经过后天学习后的iq为${iq}")
      }
    }
    //var sc1 = new sc -----报错
    var sc1 = new shenchong
    println(sc1.iq)
    println(sc1.sex)
    println(sc1.age)
    sc1.get()
    sc1.add()
  }
}

image.png

四:重写抽象类:

如果子类中对抽象类中的方法定义不满意,仍可以使用override去覆盖的。


package txy

object Demo14 {
  def main(args: Array[String]): Unit = {
    abstract class sc() {
      var sex:String
      var age:Int
      var iq:Int
      def add():Unit
      def get()= {
        print(s"沈冲年龄为${age}")
        print(s"沈冲的iq为${iq}")
        print(s"沈冲的性别为${sex}")
      }
    }
    class shenchong extends sc{
      var sex:String ="男"
      var age:Int = 18
      var iq:Int = 30
      def add(): Unit = {
        iq *= 2
        age += 3
        sex = "女"
        print(s"沈冲经过后天学习后的iq为${iq}")
        print(s"三年后沈冲的年龄为${age}")
        println(s"沈冲现在的性别为${sex}")
      }
      override def get(): Unit = {
        print(s"沈冲年纪轻轻${age}岁,")
        print(s"他的的iq就低于常人,只有${iq}")
        println(s"性别可能为${sex}")
      }
    }
    //var sc1 = new sc -----报错
    var sc1 = new shenchong
    println(sc1.iq)
    println(sc1.sex)
    println(sc1.age)
    sc1.get()
    sc1.add()
  }
}

image.png

image.png

五:内部类:

在类的内部再写一个类

package txy
//内部类:在类的内部,再写一个类
object Demo15 {
  def main(args: Array[String]): Unit = {
    class c1 {
      def say(): Unit = {
        println("c1----")
      }
      class c2 {
        def say(): Unit = {
          println("c2-----")
        }
      }
    }
    val c1 = new c1()
    //创建一个c1的对象
    val c2 = new c1.c2()
    //创建一个c2 的对象
    c2.say()
    c1.say()
  }
}