【问题标题】:What are the differences between private and protected visibility modifiers in Kotlin?Kotlin 中私有和受保护的可见性修饰符有什么区别?
【发布时间】:2019-02-22 09:47:52
【问题描述】:

我刚开始学习 kotlin,对受保护的访问修饰符感到困惑,我怀疑 kotlin 中私有访问修饰符和受保护访问修饰符之间的确切区别是什么。我在google上搜索过,但没有得到满意的答案。

【问题讨论】:

  • 与 Java 相同
  • kotlin reference # visibility modifiers 可能包含您需要知道的所有内容...如果没有,请更具体...
  • @AntonA。这是不正确的。看我的回答。
  • @homerman 和 Java 有什么不同??
  • @AntonA。在 java 中受保护也包括本地包,在 Kotlin 中它不包含

标签: android kotlin access-modifiers


【解决方案1】:

因为它与班级成员有关:

  • 标记为protected 的项目在类和子类中可见
  • 标记为private 的项目在类中可见

因为它与顶级声明有关:

  • protected 不适用)
  • 标记为private 的项目在同一文件中可见

【讨论】:

    【解决方案2】:

    类和接口

    对于在类中声明的成员:

    private 表示仅在该类内部可见(包括其所有成员);

    protected - 与 private 相同 + 在子类中也可见;

    internal - 在这个模块中看到声明类的任何客户端都会看到它的内部成员;

    public - 任何看到声明类的客户端都会看到它的公共成员。

    KotlinLang

    【讨论】:

      【解决方案3】:

      查看this 了解详细说明。

      如果您想了解受保护的概念,您需要对子类和继承有基本的了解。

      可以从子类中看到具有受保护访问说明符的变量或函数。但是私有将绑定类内的范围。

      考虑一下这个基本代码:

      open class Outer { private val a = 1 // visible only for instance of class Outer protected open val b = 2 // visible for instance of Outer and another subclass which inherits Outer. val d = 4 // public by default protected class Nested { public val e: Int = 5 } } public class Subclass : Outer() { // a is not visible // b, d are visible // Nested and e are visible override val b = 5 // 'b' is protected }

      注意:以上代码来自文档。

      【讨论】:

        【解决方案4】:

        与大多数 OOP 语言一样,Kotlin 中有几个修饰符:

        public - 可以从项目中的任何位置访问类、函数或属性。 在 Kotlin 中,类、属性或函数默认是公共的

        protected - 类、函数或属性只能由当前类的子类访问

        private - 类、函数或属性只能在当前类中访问

        internal - 可以从当前模块中的任何位置访问类、函数或属性

        【讨论】:

          【解决方案5】:

          正如官方documentatin所说:

          private 表示仅在此类内部可见(包括其所有 成员);

          protected — 与 private 相同 + 在子类中也可见;

          【讨论】:

            【解决方案6】:

            来自Kotlin doc

            private — 表示仅在该类内部可见(包括其所有成员);

            protected — 与 private 相同 + 在子类中也可见;

            可见,表示可以访问或使用该字段或方法。

            【讨论】:

              猜你喜欢
              • 2015-05-08
              • 1970-01-01
              • 2010-10-27
              • 2019-07-24
              • 2012-09-28
              • 1970-01-01
              • 2010-12-03
              • 2012-06-13
              • 1970-01-01
              相关资源
              最近更新 更多