数据类就是只存储数据,不包含操作行为的类
这里创建了一个Person的数据类和Person2的数据类,并演示两种反编译结果
// 数据类 data class
/*
数据类生成的必要条件
主构造方法至少要有一个参数
所有的主构造方法都需要被标记为val或者var 标记了叫属性 不标记叫参数
数据类不能是抽象 open sealed(密封)inner类
编译器会自动生成:
1,equals ,hashCode 方法
2,toString :name +age + address
3,针对属性的 componentN 方法,并且按照属性的声明顺序来生成
4,copy方法
关于数据类的继承要点
1、如果数据类中显示定义了equal hashCode toString方法或者是在数据类的父类中将这些方法声明为了final
那么这些方法不会再生成,会使用现成的
2、如果父类拥有了 componentN 方法并且是open的 返回类型是兼容的类型 那么编译器就会在数据类中生成相应的 componentN方法
并且重写父类中的这些方法,如果父类中的这些方法由于不兼容的签名或是被定义为final的 那么编译器就会报错
3、在数据类中显式提供 componentN 方法以及copy方法(在相同数量的属性定义,数量不相同则标记为重载)是不允许的
*/
data class Person(val name: String, var age: Int, var address: String)
//所有成员在有默