美文网首页Scala
scala-10-嵌套类

scala-10-嵌套类

作者: chen_666 | 来源:发表于2020-04-06 14:05 被阅读0次

嵌套类的使用

成员内部类和静态内部类

内部类访问外部类的属性方法

访问方式1:外部类名.this.属性名
访问方式2:内部类如果想要访问外部类的属性,也可以通过外部类别名访问(推荐)。即:访问方式:外部类名别名.属性名

类型投影

类型投影是指:在方法声明上,如果使用外部类#内部类的方式,表示忽略内部类的对象关系, 等同于 Java 中内部类的语法操作,我们将这种方式称之为 类型投影,如果不使用类型投影,那么传入的方法参数,是和外部类绑定在一起的,也就是inner1中只能出入out1内的inner1对象,而不能传入inner2对象,使用类型投影可以解决这个问题

package com.atguigu.chapter08.innerclass

import com.atguigu.chapter08.innerclass

object ScalaInnerClassDemo {
  def main(args: Array[String]): Unit = {
    //测试1. 创建了两个外部类的实例
    val outer1 : ScalaOuterClass = new ScalaOuterClass();
    val outer2 : ScalaOuterClass = new ScalaOuterClass();

    //在scala中,创建成员内部类的语法是
    //对象.内部类  的方式创建, 这里语法可以看出在scala中,默认情况下内部类实例和外部对象关联
    val inner1 = new outer1.ScalaInnerClass
    val inner2 = new outer2.ScalaInnerClass

    //测试一下使用inner1 去调用 info()
    inner1.info()

    //这里我们去调用test
    inner1.test(inner1)
    //在默认情况下,scala的内部类的实例和创建该内部类实例的外部对象关联.
    //
    inner1.test(inner2)
    inner2.test(inner2)


    //创建静态内部类实例
    val staticInner= new ScalaOuterClass.ScalaStaticInnerClass()


  }
}

//外部类
//内部类访问外部类的属性的方法1 外部类名.this.属性
//class ScalaOuterClass {
//  //定义两个属性
//  var name = "scoot"
//  private var sal = 30000.9
//
//  class ScalaInnerClass { //成员内部类,
//
//    def info() = {
//      // 访问方式:外部类名.this.属性名
//      // 怎么理解 ScalaOuterClass.this 就相当于是 ScalaOuterClass 这个外部类的一个实例,
//      // 然后通过 ScalaOuterClass.this 实例对象去访问 name 属性
//      // 只是这种写法比较特别,学习java的同学可能更容易理解 ScalaOuterClass.class 的写法.
//      println("name = " + ScalaOuterClass.this.name
//        + " sal =" + ScalaOuterClass.this.sal)
//    }
//  }
//
//}

//外部类
//内部类访问外部类的属性的方法2 使用别名的方式
//1. 将外部类属性,写在别名后面
class ScalaOuterClass {
  myouter => //这里我们可以这里理解 外部类的别名 看做是外部类的一个实例
  class ScalaInnerClass { //成员内部类,

    def info() = {
      // 访问方式:外部类别名.属性名
      // 只是这种写法比较特别,学习java的同学可能更容易理解 ScalaOuterClass.class 的写法.
      println("name~ = " + myouter.name
        + " sal~ =" + myouter.sal)
    }
    //这里有一个方法,可以接受ScalaInnerClass实例
    //下面的 ScalaOuterClass#ScalaInnerClass 类型投影的作用就是屏蔽 外部对象对内部类对象的
    //影响
    def test(ic: ScalaOuterClass#ScalaInnerClass): Unit = {
      System.out.println("使用了类型投影" + ic)
    }

  }
  //定义两个属性
  var name = "jack"
  private var sal = 800.9
}


object ScalaOuterClass { //伴生对象
class ScalaStaticInnerClass { //静态内部类
}
}

相关文章

  • scala-10-嵌套类

    嵌套类的使用 成员内部类和静态内部类 内部类访问外部类的属性方法 访问方式1:外部类名.this.属性名访问方式2...

  • 局部类和嵌套类

    一. 嵌套类 1.1嵌套类的定义 在一个类体中定义的类叫作嵌套类。拥有嵌套类的类叫外围类。 1.2嵌套类的作用 定...

  • 常见的类

    嵌套类 内部类 枚举类 密封类 数据类 单例模式 伴生对象 嵌套类 嵌套类是嵌套在其它类中的类 不能访问外部类的成...

  • kotlin精讲-第3章(4)嵌套类&数据类

    嵌套类 我们在Kotlin内部还可以定义类,这样的类,我们可以称为嵌套类(nestedclasses)。嵌套类分成...

  • Java 内部类(嵌套类)和局部类

    嵌套类 定义在另一个类中的类,就叫嵌套类。在嵌套类外层的累,称为:外部类最外层的外部类,称为:顶级类 嵌套类又分为...

  • Kotlin面向对象 (7)✔️嵌套类

    嵌套类内部类 (特殊的嵌套类) kotlin 语言中允许在一个类的内部声明另一个类,称为“嵌套类”,嵌套类还有一种...

  • Java-嵌套类

    嵌套类分为两类:静态和非静态。被声明static的嵌套类称为静态嵌套类。非静态嵌套类称为内部类。内部类有两种特殊的...

  • 10. 内部类

    1. 普通嵌套类 在Kotlin中,一个类嵌套在其他类中,而且可以嵌套多层 测试代码: 访问嵌套类的方式是 直接使...

  • kotlin 嵌套和内部类

    Kotlin 嵌套类 与Java类似,Kotlin允许您在另一个称为嵌套类的类中定义一个类 由于嵌套类是其封闭类的...

  • Android开发必知的java嵌套类

    嵌套类 指定义在另一个类的内部的类,嵌套类的存在只是为了他的外围类。嵌套类有四种:静态成员类,非静态成员类,匿名类...

网友评论

    本文标题:scala-10-嵌套类

    本文链接:https://www.haomeiwen.com/subject/yqxbphtx.html