类的属性
class Person {
// val 修饰的属性,系统会自动生成get方法·
val id: String = "1234"
// 可以自定义get方法
def getId(): String = {
println("self-defined getId")
this.id
}
// var 修饰的属性,系统自动生成get和set方法
var name: String = " "
// private var 修饰的属性,系统自动生成private的get和set方法
// 类的私有字段
private var gender: Int = 0
// private this 修饰的属性,系统不会生成get和set方法
// 只有当前对象可以访问
private[this] var age: Int = 0
/* def compare(obj: s17_Person): Int = {
return this.age - obj.age // obj不能访问age
}*/
}
object s17_Class {
def main(args: Array[String]): Unit = {
var person = new Person()
println(person.id)
println(person.getId())
person.name = "zhangsan"
println(person.name)
}
}
构造器
class Shape {
var edges = 4
var name = "Rectangle"
println("Constructor Study")
// 自定义辅助构造方法
def this(edges: Int) {
// 首先需要调用主构造函数或其他辅助构造函数
this()
this.edges = edges
}
def this(edges: Int, name: String) {
this(edges)
this.name = name
}
def compare(s2: Shape): Int = {
return this.edges - s2.edges
}
}
class Student(id: String, name: String, age: Int) { // 不加var是作为构造函数的参数
var grade: Int = 0
def getId(): String = {
this.id
}
def getName(): String = {
this.name
}
def getAge(): Int = {
this.age
}
def this(id: String, name: String, age: Int, grade: Int) { // 自定义辅助构造函数
this(id, name, age)
this.grade = grade
}
}
/*public class Student
{
public Student(String id, String name, int age) {}
}*/
class Student1(id: String, var name: String, var age: Int) { // 加var是作为类的属性,自动添加get和set方法
def getId(): String = {
this.id
}
}
class Student2 private(var id: String) {
var name: String = ""
def this(id: String, name: String) {
this(id)
this.name = name
}
}
/*
public class Student1
{
public Student1(String id, String name, int age) {}
public void age_$eq(int x$1)
{
this.age = x$1;
}
public int age()
{
return this.age;
}
public void name_$eq(String x$1)
{
this.name = x$1;
}
public String name()
{
return this.name;
}
}
*/
object s18_constructor {
def main(args: Array[String]): Unit = {
var sh = new Shape // 调用默认的主构造方法,主构造方法会执行类中所有语句
println(sh.edges)
val sh1 = new Shape(3)
println(sh1.edges)
val sh2 = new Shape(5, "stars")
println(sh2.edges + "**" + sh2.name)
println(sh1.compare(sh2))
val s = new Student("U201310426", "Shine", 24, grade = 2017)
// println(s.name) //error 非var定义的不是类的成员,需要自定义get方法进行访问
println(s.getName())
println(s.grade) // 类的内部定义的成员,系统会它提供get方法,可以直接访问
val s1 = new Student1("U201310426", "Shine", 24)
// println(s1.id)//error
println(s1.name) //传入的参数以var或val来说明,那么这个参数会成为类的字段
println(s1.getId())
// val s2 = new Student2("123456") // 报错,私有构造器,无法访问
val s2 = new Student2("123456", "hello")
println(s2.id + " " + s2.name)
}
}