案例一成员变量
object CatDemo {
def main(args: Array[String]): Unit = {
//创建一只猫
val cat = new Cat
//给猫的属性赋值
//说明
//1. cat.name = "小白" 其实不是直接访问属性,而是 cat.name_$eq("小白")
//2. cat.name 等价于 cat.name()
cat.name = "小白" //等价
cat.age = 10
cat.color = "白色"
println("ok~")
printf("\n小猫的信息如下: %s %d %s", cat.name, cat.age, cat.color)
}
}
//定义一个类Cat
//一个class Cat 对应的字节码文件只有一个 Cat.class ,默认是public
class Cat {
//定义/声明三个属性
//说明
//1. 当我们声明了 var name :String时, 在底层对应 private name
//2. 同时会生成 两个public方法 name() <=类似=> getter public name_$eq() => setter
var name: String = "" //给初始值
var age: Int = _ // _ 表示给age 一个默认的值 ,如果Int 默认就是0
var color: String = _ // _ 给 color 默认值,如果String ,默认是就是""
}
/*
public class Cat
{
private String name = "";
private int age;
private String color;
public String name()
{
return this.name; }
public void name_$eq(String x$1) { this.name = x$1; }
public int age() { return this.age; }
public void age_$eq(int x$1) { this.age = x$1; }
public String color() { return this.color; }
public void color_$eq(String x$1) { this.color = x$1; }
}
*/
class Dog{
var name = "jack"
var lover = new Fish
}
class Fish{
}
案例二:子类转父类
object CreateObj {
def main(args: Array[String]): Unit = {
val emp = new Emp // emp 类型就是Emp
//如果我们希望将子类对象,交给父类的引用,这时就需要写上类型
val emp2: Person = new Emp
}
}
class Person {
}
class Emp extends Person {
}
案例三:引用地址
object MemState {
def main(args: Array[String]): Unit = {
val p1 = new Person2
p1.name = "jack"
p1.age = 10
val p2 = p1
println(p1 == p2) // true
p1.name = "tom"
println("p2.name=" + p2.name)
}
}
class Person2 {
var name = ""
var age: Int = _ //如果是用 _ 方式给默认值,则属性必须指定类型
}
案例五:成员变量
object PropertyDemo {
def main(args: Array[String]): Unit = {
// val p1 = new Person
// println(p1.Name) //Null
// println(p1.address) //String类型
val a = new A
println(a.var1) // null 还是 ""
println(a.var2) // 0
println(a.var4) //false
//创建两个对象
var worker1 = new Worker
worker1.name = "jack"
var worker2 = new Worker
worker2.name = "tom"
}
}
class Person3 {
var age: Int = 10 //给属性赋初值,省略类型,会自动推导
var sal = 8090.9
var Name = null // Name 是什么类型
var address: String = null //ok
}
class A {
var var1 :String = _ // null
var var2 :Byte = _ // 0
var var3 :Double = _ //0.0
var var4 :Boolean = _ //false
}
class Worker {
var name = ""
}