zoukankan      html  css  js  c++  java
  • 常用类的介绍

    抽象类

    1. 抽象方法:指一些只有方法声明,而没有具体方法体的方法。
    2. 抽象字段:定义了field,但是没有给出初始值,则此field为抽象field
    3. 抽象类:如果一个类中有抽象字段或者抽象方法的类一定是抽象类,抽象类中不一定有抽象方法或者抽象字段,只需要用abstract 修饰
    4. 抽象类:不可以实例化的,子类继承抽象类必须实现抽象类中的成员
    5. 子类在实现父类的抽象字段或者抽象方法的时候,不使用override
    6. 子类在覆盖(重写)父类的字段或者方法的时候,一定使用override
    7. 重写字段的实质是在重写字段的setter、getter方法
    abstract class Person(val name: String) {
      def sayHello
      val age: String
    }
    class Student(name: String) extends Person(name) {
      def sayHello: Unit = println("Hello, " + name)
      val age: String = "leo"
    }

    匿名子类

    1. 在Scala中,匿名子类是非常常见,而且非常强大的。Spark的源码中也大量使用了这种匿名子类
    2. 匿名子类:定义一个类的没有名称的子类,并直接创建其对象。(通过new 父类名 进行创建,可以同时重写父类中的成员)
    3. 可以将对象的引用赋予一个变量
    object test {
          def main(args: Array[String]): Unit = {
            class Person(protected val name: String) {
              def sayHello = "Hello, I am " + name
            }
            val p = new Person("leo") {  //匿名子类(创建匿名子类的同时直接创建匿名子类的对象p)
            override def sayHello = "Hi, I'm " + name  //重写父类中的方法
            }
            def greeting(s:Person) { //将该匿名子类的对象传递给其他函数
              println(s.sayHello)
            }
            greeting(p)
          }
        }

     内部类

    1. 内部类是隶属于对象而不是隶属于类本身
    2. 创建内部类的实例:需要先创建外部类的实例,在创建内部类的实例。如:
      1. val outer1= new OutClass
      2. val inner1= new outer1.InnerClass
    3. 直接调用内外部类的属性的方式
      1. 使用this的方式调用:OutClass.this.name ()表示外部类   this.name和name表示内部类
      2. 使用别名的方式调用:outer.name表示外部类  (outer表示外部类对象的别名)
    class OutClass(val name:String) { outer=>
      class InnerClass(val name:String){
       def info1=println("外部类:"+OutClass.this.name+"内部类:"+this.name) //第一种方法this的形式调用
        def info2=println("外部类:"+outer.name+"内部类:"+name)    //第二种方法调用,别名调用外部类
      }
    }
    object printOut{
      def main(args: Array[String]): Unit = {
        val outer= new OutClass("out")
        val inner= new outer.InnerClass("inner")
        inner.info1
        inner.info2
      }
    }
  • 相关阅读:
    innodb buffer pool小解
    information_schema系列十一
    Shader编程教程
    第四章 继承
    第三章 对象和类型
    第二章:核心C#
    前言和第一章.NET的体系结构
    单例模式
    代理模式
    第 1 章 策略模式【Strategy Pattern】
  • 原文地址:https://www.cnblogs.com/WeiKing/p/11662314.html
Copyright © 2011-2022 走看看