首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin学习笔记(四)-面向对象

- default (包内可见) internal (模块Module内可见) - public public object类关键字 object修饰的类只有一个实例的类 本质上就是单例模式最基本的实现...} 伴生对象与静态成员 kotlin 中时没有static 这种方法修饰的静态方法 所以要实现 类似于java中的静态属性就要用到伴生对象 例子: fun main(args: Array<String...可继承父类,实现多个接口,与Java注意区别. kotlin内部类与java 内部类的区别 java的内部类可以直接访问外部类的成员, kotlin的内部类不能直接访问外部类的成员 必须用inner标记之后才能访问外部类的成员...// println(a)//访问不到 说明kotlin中默认是使用静态static内部类的 println(this@Outter.a)//当内外部类重载相同的属性或方法时...枚举类中定义方法,那么要在枚举对象最后加上; 这基本是Kotlin中唯一一个需要强制写;的地方 密封类 密封类与枚举的区别:前者是子类可数,后者是实例可数 密封类(Sealed Class)的子类必须和父类定义在同一个文件中

85510
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Kotlin 之美

    反之,充分利用好四种访问权限,将类和成员的可访问性控制到最小,更有利于程序的扩展。在这点上,Java 和 Kotlin 是大体一致的,但有细微区别: ?...,app 工程中的 Activity 无法访问该类。...EJ 第22条:优先考虑静态成员类 在 Java 中,我们经常要把一个类定义在另外一个类的内部,该类被称之为内部类。内部类有四种:静态成员类、非静态成员类、匿名类和局部类。...该条款建议优先考虑静态成员类,原因在于静态成员类相比非静态成员类而言,不会持有外部类的引用,会带来几个好处: 无需实例外部类就可以使用 当外部类可以被垃圾回收时,不会因为内部类的持有而导致内存泄露。...Kotlin 在语法层面直接对该条款进行支持,静态成员类在 Kotlin 中称为『嵌套类』,默认的内部类便是嵌套类,比如: class Outer { class Inner { // 默认便是静态成员类

    2.9K20

    From Java To Kotlin:空安全、扩展、函数、Lambda很详细,这次终于懂了

    Kotlin 出自于捷克一家软件研发公司 JetBrains ,这家公司开发出很多优秀的 IDE,如 IntelliJ IDEA、DataGrip 等都是它的杰作,包括 Google 官方的 Android...class A { class B { } } 以上代码中,B 类,就是 A 类里面的嵌套类。 注意: 无法在 B 类当中访问 A 类的属性和成员方法。...Kotlin 则恰好相反,在默认情况下,嵌套类变成了静态内部类,而这种情况下的嵌套类是不会持有外部类引用的。只有当我们真正需要访问外部类成员的时候,我们才会加上 inner 关键字。...从语法上看,扩展看起来就像是我们从类的外部为它扩展了新的成员。...扩展函数 扩展函数,就是从类的外部扩展出来的一个函数,这个函数看起来就像是类的成员函数一样 Extension.kt /* ① ② ③ ④ ↓ ↓

    1.3K80

    kotlin基础语法

    抽象成员在类中不存在具体的实现。...内部类会带有一个对外部类的对象的引用,所以内部类可以访问外部类成员属性和成员函数。...fun foo() = bar // 访问外部类成员 fun innerTest() { var o = this@Outer //获取外部类的成员变量...internal // 同一个模块中可见 继承 Kotlin 中所有类都继承该 Any 类,它是所有类的超类,对于没有超类型声明的类是默认超类: class Example // 从 Any 隐式继承...如果你使用匿名对象作为公有函数的 返回类型或者用作公有属性的类型,那么该函数或属性的实际类型 会是匿名对象声明的超类型,如果你没有声明任何超类型,就会是 Any。在匿名对象 中添加的成员将无法访问。

    2.1K20

    Kotlin中级(9)- - - Kotlin类之数据类、密封类、内部类.md

    val或var 数据类不能是抽象类、open类、封闭类、内部类 数据类不能继承自任何其他类(但可以实现接口) 3.访问数据类的2种方法 和普通类一样"对象名.数据名" 编译器从主构造函数中声明的属性中导出的成员方法...但是,我们知道Kotlin的枚举类中的枚举常量是受限的,因为每一个枚举常量只能存在一个实例 但是其和枚举类不同的地方在于,密封类的一个子类可以有可包含状态的多个实例。...在调用的时候嵌套类是需要实例化的。 内部类不能使用外部类的属性和成员 匿名内部类 作为一名Android开发者,对匿名内部类都不陌生,因为在开发中,匿名内部类随处可见。...从声明类上看,继承的两个类单独声明,子类通过(子类:父类)继承父类,而内部类必须声明在外部类里面,并且用关键字inner标记 从访问上看,继承的父类不能直接访问子类,外部类可以通过“外部类().内部类...()”访问内部类,继承的子类能直接访问父类公开的成员属性及方法,而内部类值能通过this@外部类的方式访问外部类的属性和方法 从能否覆盖上看,继承的子类能覆盖父类用open标记的属性和方法,内部类不能覆盖外部类的属性和方法

    1.2K20

    第4章 类与面向对象编程第4章 类与面向对象编程

    在ALGOL60中采用了以 Begin - End 为标识的程序块,使块内变量名是局部的,以避免它们与程序中块外的同名变量相冲突。在编程语言中首次提供了封装(保护)的机制。...如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用。 4.3.2 接口 接口是一种比抽象类更加抽象的“类”。接口本身代表的是一种“类型”的概念。...如果一个类Inner想要访问外部类Outer的成员,可以在这个类前面添加修饰符 inner。...跟普通嵌套类直接使用类名访问的方式区分。 4.8.3 匿名内部类 匿名内部类,就是没有名字的内部类。既然是内部类,那么它自然也是可以访问外部类的变量的。...本章小结 本章我们介绍了Kotlin面向对象编程的特性: 类与构造函数、抽象类与接口、继承与组合等知识,同时介绍了Kotlin中的注解类、枚举类、数据类、嵌套类、内部类、匿名内部类、单例object对象等特性类

    1.8K20

    Kotlin 的成员扩展函数和 implicit receiver

    咱来从它的基本特性说起。...嵌套的 implicit receiver this,或者说隐式的 receiver,是可以嵌套的,比如在 Java 里我们可以这么写: 我在这个内部类的里面,想访问内部类和外部类的成员都是可以的,是吧...另外,对于它们同名的成员变量或者方法,如果我也省略掉 this: 拿到的就是内部类的成员。如果想拿外部类的,就必须把 this 写完整: 到现在为止,做 Java 的基本是都懂的。我们继续。...Kotlin 增加的 implicit receiver 嵌套:通过函数的 receiver 指定 然后,Kotlin 对于这种嵌套,又新增了一类场景——咱刚才看的是通过内部类来嵌套是吧?...不管是使用 Kotlin 现成的函数还是我们自己来实现,Kotlin 允许我们通过这种「指定」的方式来手动安插新的 this 到代码里,而不用非得用内部类才能实现。

    22510

    java学习笔记(基础篇)—内部类

    2)定义类的范围从package变成了类。在一个类的内部定义的类称为内部类。...3)外围类不能直接访问成员内部类的资源.先创建成员内部类的对象,在通过调用非静态资源(对象.资源). 4)在成员内部类中和外围类中创建成员内部类的对象成员内部类中: 类名 m=new 成员内部类类名...//在外部类内内部类外创建 实例内部类:new Outer().new Inner(); //在外部类外创建; this.new Inner();...//在外部类内内部类外创建 局部内部类:new Inner(); //只能在方法内部创建 匿名内部类:new 类名()...局部内部类:可以直接访问外部类的所有成员, 访问所在方法中的final类型的参数和变量; 匿名内部类:可以直接访问外部类的所有成员, 访问所在方法中的final类型的参数和变量; //成员内部类,静态内部类

    58060

    Kotlin | 4.类、对象和接口

    */ /*--------------- 4.1.4 内部类和嵌套类:默认是嵌套类 -------------*/ // Kotlin 的嵌套类不能访问外部类的实例,...这个例子中的 ButtonState 类隐式地存储了它的外 * 部Button 类的引用。...中的对应关系 * 类A在另一个类B中声明 在Java中 在Kotlin中 * 嵌套类(不存储外部类的引用) static class...使用 inner 关键字来存储外部类的引用。 sealed 类的子类只能嵌套在自身的声明中(Kotlin 1.1 允许将子类放置在同一文件的任意地方)。...初始化语句块和从构造方法为初始化类实例提供了灵活性 使用 field 标识符在访问器方法体中引用属性的支持字段 数据类提供了编译器生成的 equals hashCode toString copy 和其他方法

    96210

    Better Kotlin

    大家也要尽量的避免这种情况。 3 应该好好注意一下伴生对象 伴生对象通过在类中使用 companion object 来创建,用来替代静态成员,类似于 Java 中的静态内部类。...访问一个伴生对象的私有常量字段需要经过以下方法: 调用伴生对象的静态方法 调用伴生对象的实例方法 调用主类的静态方法 读取主类中的静态字段 为了访问一个常量,而多花费调用4个方法的开销,这样的 Kotlin...之前有人写过这样的代码,表示很不解,一个接口类型的成员变量,访问外部类的成员变量 name。这不是理所应当的么?...核心意思是:Kotlin 使用 object 代替 Java 匿名内部类实现。 很明显,即便如此,这里的访问应该也是合情合理的。从匿名内部类中访问成员变量在 Java 语言中是完全允许的。...确实,Java 中静态内部类是不允许访问外部类的成员变量的。但,说好的 object 代替的是 Java 的匿名内部类呢?那这里为啥是静态内部类。

    1.3K20

    Kotlin学习日志(五)类与对象

    ,它们都在类的伴生对象中定义,外部可以通过类名直接访问该类的静态成员。...四、特殊类 4.1 嵌套类 一个类可以在单独的代码文件中定义,也可以在另一个类内部定义,后一种情况叫作嵌套类,即A类嵌套在B类之中,听起来和Java的嵌套类是一样的,但其实有所差别,Java的嵌套类允许访问外部类的成员...,而Kotlin的嵌套类不允许访问外部类的成员,强行访问则会报错。...4.2 内部类 Kotlin限制了嵌套类不能访问外部类的成员,那还有什么方法可以实现此功能呢?...针对该问题,Kotlin另外增加了关键字inner表示内部,把inner加在嵌套类的class前面,然后嵌套类就变成了内部类,所以Kotlin的内部类就相当于Java的嵌套类,而Kotlin的嵌套类则是加了访问限制的内部类

    1.2K20

    并发编程中的逃离“996icu”——this引用逃逸

    (访问)了该引用,可能会问到该还未被初始化的变量,甚至可能会造成更大严重的问题(如危及到线程安全)。...简单来说,就是在一个类的构造器创建了一个内部类(内部类本身是拥有对外部类的所有成员的访问权的),此时外部类的成员变量还没初始化完成。...但是,同时这个内部类被其他线程获取到,并且调用了内部类可以访问到外部类还没来得及初始化的成员变量的方法。...(2)在构造器中内部类使用外部类情况:内部类访问外部类是没有任何条件的,也不要任何代价,也就造成了当外部类还未初始化完成的时候,内部类就尝试获取为初始化完成的变量。 那么,如何避免this逃逸呢?...也就是说,如果要在构造函数中创建内部类,那么就不能在构造函数中把他发布了,应该在构造函数外发布,即等构造函数执行完初始化工作,再发布内部类。

    1.4K20

    Java学习笔记:深入理解嵌套类和内部类

    StaticTest(); staticTest.printInfo(); } } 在静态嵌套类内部,不能访问外部类的非静态成员,这是由Java语法中"静态方法不能直接访问非静态成员"所限定。...注意,外部类访问内部类的的成员有些特别,不能直接访问,但可以通过内部类来访问,这是因为静态嵌套内的所有成员和方法默认为静态的了。...另外,就是要注意,内部类Inner及 InnterTwo只在类Outer的作用域内是可知的,如果类Outer外的任何代码尝试初始化类Inner或使用它,编译就不会通过。...同时,内部类的变量成员只在内部内内部可见,若外部类或同层次的内部类需要访问,需采用示例程序中的方法,不可直接访问内部类的变量。...同时,它有一个特点,就是方法内的内部类连本方法的成员变量都不可访问,它只能访问本方法的final型成员。

    69520

    剖析【C++】——类和对象(下篇)——超详解——小白篇

    初始化:静态成员变量必须在类外进行初始化。 面试题:实现一个类,计算程序中创建了多少个类对象。...静态成员变量必须在类外定义:定义时不添加static关键字,类中只是声明。 访问静态成员:静态成员可以通过类名::静态成员或对象.静态成员访问。...3.3总结: 友元函数和友元类允许访问私有和保护成员,但要谨慎使用,因为这会增加代码的耦合性。 友元关系是单向的,不可传递。 使用友元可以解决一些特殊情况下的访问权限问题,如重载运算符等。 4....区域内,可以访问外部类的静态和非静态成员。...外部类不能访问内部类的私有成员,内部类也不会影响外部类的大小计算。 5.再次理解类和对象 1. 抽象现实生活中的实体 在现实生活中,计算机无法直接认识物理世界中的实体,如洗衣机。

    7510

    Kotlin Vocabulary | 唯一的 "对象"

    接下来的内容会告诉大家在 Java 和 Kotlin 中实现单例的区别,以及在 Kotlin 中如何在不使用 static 关键字的情况下实现单例,(其实就是通过 object 关键字实现的),然后为大家详解使用...Kotlin 中并没有静态方法或者静态字段,那么我们如何在 Kotlin 中创建单例呢? 实际上,可以通过 Android Studio/IntelliJ 来帮助我们理解这一问题。...当 Singleton 类进行初始化的时候,JVM 会从同步代码块中获得一个锁,如此一来,其它线程就无法访问它。...如果定义了 companion object 的名称,也可以通过名称来访问它的类成员。 的内联类。宿主类会通过一个合成构造方法来初始化一个内部类,这个内部类只有宿主类才能够访问。

    1.5K60

    【C++ 初阶路】--- 类和对象(末)

    如上如所示 在构造函数体中的是赋值修改!...,不属于某个具体的对象,存放在静态区; 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明; 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问; 静态成员函数没有隐藏的...内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。...注意:内部类就是外部类的友元类, 参见友元类的定义,内部类可以通过外部类的对象参数来访问外部类中的所有成员。但是外部类不是内部类的友元。...特性: 内部类可以定义在外部类的public、protected、private都是可以的。 注意内部类可以直接访问外部类中的static成员,不需要外部类的对象/类名。

    8010
    领券