zoukankan      html  css  js  c++  java
  • Scala学习——面向对象

    Scala面向对象

    三大特征:封装、继承、多态

    1、类的定义和使用

    package top.ruandb.scala.Course02
    object Simple {
     
      def main(args: Array[String]): Unit = {
     
        val person = new People;
        person.name="张三"
        println(person.name +" "+ person.age)
        person.eat("香蕉")
        person.printInfo()
      }
     
      //类的定义
      class People(){
        //定义属性
        var name:String = _
        val age = 18
        //私有属性
        private[this] val gender= "male"
     
        //定义方法
        def eat(food:String): Unit ={
          println(name + "正在吃" + food)
        }
     
        def printInfo(): Unit ={
          println("gender:"+gender)
        }
      }
    }

    2、构造器

    package top.ruandb.scala.Course02
     
    object Constructor {
     
      def main(args: Array[String]): Unit = {
     
        //使用主构造器
        val person1 = new People("张三",18);
        println(person1.name + " " + person1.age + " " + person1.gender )
        //使用附属构造器
        val person2 = new People("李四",22,"male")
        println(person2.name + " " + person2.age + " " + person2.gender )
      }
     
      //主构造器
      class People(val name:String,val age:Int){
     
        var gender:String = _
     
        //附属构造器
        def this(name: String,age:Int,gender:String){
          this(name,age)//附属构造器必须首先调用主构造器或者其他附属构造器
          this.gender = gender
        };
      }
    }

    3、继承 extends

    package top.ruandb.scala.Course02
     
    import top.ruandb.scala.Course02.Constructor.People
     
    object Constructor {
     
      def main(args: Array[String]): Unit = {
     
        val student = new Student("王五",89,"通信工程")
        println(student.name + " " + student.age + " " + student.major)
     
        println(student.toString)
     
      }
     
      //主构造器
      class People(val name:String,val age:Int){
     
        var gender:String = _
        val height:Float = 1.73f
     
        def this(name: String,age:Int,gender:String){
          this(name,age)
          this.gender = gender
        };
      }
      //Student类继承People类
      class  Student (name:String,age:Int,var major:String) extends People(name,age){
     
        //重写属性
        override val height =1.65f
        //重写toString方法
        override def toString: String = "name:" + name +" "+ "age:" + age + " " + "major:" + major
      }
    }

    4、抽象类

    /**
        * 抽象类,只有方法定义,没有方法实现
        * 属性也只有定义
        */
      abstract class  People1{
        var name:String
        var age:Int
     
        def eat(food:String)
        def speak
      }
     
      /**
        * 继承抽象类,重写方法和属性
        */
      class Person1 extends People1{
     
        override var name: String = "赵六"
        override var age: Int = 100
     
        override def eat(food: String): Unit = println("吃"+food)
        override def speak: Unit ={
          println("大声说话")
        }
      }

    5、伴生类和伴生对象

    如果有一个Class,还有一个与Class同名的Object

    那么就称这个Object是Class的伴生对象,Class是Object的伴生类,其中伴生对象是一个单例对象

    伴生对象和伴生类可以互相访问其私有成员

    package top.ruandb.scala.Course03
    object Companion {
     
      def main(args: Array[String]): Unit = {
     
        for( i <- 1.to(10)){
          TestCompanion.incr
        }
        println(TestCompanion.count)//结果为10,说明伴生对象是一个单例对象
     
      }
    }
     
    /**
      * 伴生类和伴生对象
      * class TestCompanion是伴生对象Object TestCompanion的伴生类
      * object TestCompanion是伴生类class TestCompanion的伴生对象
      */
     
    //伴生类
    class TestCompanion{
    }
     
    //伴生对象
    object TestCompanion{
     
      var count = 0
      def incr ={
        count += 1
      }
    }

    6、scala apply

    package top.ruandb.scala.Course03
     
    object ApplyApp {
     
      def main(args: Array[String]): Unit = {
     
        val at1 = ApplyTest()//实际是通过伴生对象apply方法进行了对象实例化,避免了手动new对象
      }
    }
    class ApplyTest{
    }
    object ApplyTest{
      def apply() = {
        println("object apply function")
        new ApplyTest
      }
    }
  • 相关阅读:
    linux 用户、组,修改文件权限
    linux下获取帮助
    PHPSESSID的cookie//session_start()
    【python】import 模块、包、第三方模块
    python练习——最长的递减子序列
    python练习——水仙花数
    Linux目录结构
    Scala入门3(特质线性化)
    Scala入门2(特质与叠加在一起的特质)
    人工智能我见及特征提取mfcc算法理解
  • 原文地址:https://www.cnblogs.com/jnba/p/10673843.html
Copyright © 2011-2022 走看看