类和属性

作者: 墨白历险记 | 来源:发表于2018-09-28 13:25 被阅读4次
创建

首先我们先回忆一下Java中如何创建实体类,我们创建一个学生类,其中有两个私有属性,姓名name和年龄age,并且我们为其提供构造器和访问器,我们通过构造方法来创建实体类,通过getter和setter方法来进行属性的访问和修改,同时可以在setter方法里面做一些额外的逻辑,比如对数据的验证.

public class Student {
    private String name;
    private int age;


    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

接下来我们用Kotlin再编写一个相同的Student类.

class Student(var name: String, var age: Int)

在这段代码中,我们只是使用var关键字声明了两个属性,仅此而已.
可能就有人会产生疑问了,我们没有声明他的访问器方法,要如何访问和修改这个属性呢???
其实在kotlin中,我们声明属性的同时也对应的声明了相应的访问器来进行数据的访问和修改操作.
那么此时我们就需要注意一点了,在声明属性时我们所使用的关键字是具有不同功能的,var关键字表示该属性是可变的(可读可写),val则表示不可变的(只读).也就代表使用var会同时生成getter和setter方法,而使用val则只会生成getter方法.
注:如有特殊需要,则可以声明自定义的访问器方法.

使用

上面描述了如何在java和kotlin中创建类,接来下我们该使用它们了.

访问
  # java
   Student student = new Student("老七", 18);
   System.out.println(student.getName());      >>>老七
   System.out.println(student.getAge());       >>>18
  # kotlin
   val student: Student = Student("七叔阿", 99)
   println(student.name)                        >>>七叔阿
   println(student.age)                         >>>99

修改
  # java
   student.setName("777阿");
   student.setAge(25);
 # kotlin
   student.name = "七叔同学"
   student.age = 18

对比可以发现,在kotlin中我们不需要在调用getter方法访问属性值,修改时也不用再调用setter方法.

自定义访问器

上面我们说过,当有特殊需求的时候,我们可以自己定义访问器的方法,接下来我们就看看如果来自定义kotlin的访问器.

声明
class Student(var name: String, var age: Int) {
    val isAdult: Boolean = age > 18          判断是否是成年人(大于18)
    val isChild: Boolean                     判断是否是个小宝贝(1到4之间 包含1和4)
        get() {
          return  age in 1..4
        }
}
使用
    println(student.isAdult)          
    println(student.isChild)

属性isAdult和isChlid不需要字段来保存值,并且有一个自定义实现的getter.值为每次访问该属性时进行计算的.
可以使用带有"{}"包裹的代码块也可以直接使用"="来返回结果.

相关文章

  • 类和属性

    创建 首先我们先回忆一下Java中如何创建实体类,我们创建一个学生类,其中有两个私有属性,姓名name和年龄age...

  • python 类属性和类方法

    类属性和类方法 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 —— 实例 使...

  • 10_属性

    属性将值跟特定的类、结构或枚举关联。计算属性可以用于类、结构体和枚举,存储属性只能用于类和结构体。 存储属性和计算...

  • python学习笔记-(4)面向对象

    类定义格式 添加和获取对象属性 类外面添加对象属性 类外面获取对象属性 类里面获取对象属性 魔法方法 __init...

  • Kotlin 类和属性

    前言 面向对象编程已不是什么新鲜概念,你也许非常熟悉 类 的抽象机制。Kotlin 这方面的概念你也许会感觉似曾相...

  • Swift 3.0 学习笔记之Properties

    计算属性由类,结构和枚举提供。 存储属性仅由类和结构提供。 Stored Properties 存储属性 stru...

  • Python魔法方法-__dict__

    __dict__ 类或对象中的所有属性类的实例属性属于对象;类中的类属性和方法等属于类,即:

  • python中OOP的类属性和方法与多态

    目录 类的结构 类属性和实例属性 类方法和静态方法 多态 私有属性和私有方法 01. 类的结构 1.1 术语 ——...

  • 属性

    属性分类 计算属性可以用于类、结构体和枚举;存储属性只能用于类和结构体 存储属性 存储变量(var)、常量属性(l...

  • java之面向对象1

    1.类和对象: (1)类:类是模子,确定对象将有的属性和方法。 类的特点:类是对象的类型,具有相同属性和方...

网友评论

    本文标题:类和属性

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