scala 代码
object StdClass {
def main(args: Array[String]): Unit = {
val phone:Phone = new Phone()
phone.cpu="123"
println(phone.cpu)
}
}
class Phone{
val name:String="iphone15"
var cpu:String = "A100"
var screen:Double=6.1
var rom:Int=128
var ram:Int = 4
}
反编译
idea 反编译
反编译工具
使用 http://java-decompiler.github.io/ 工具
反编译代码
public class Phone {
private final String name = "iphone15";
public String name() {
return this.name;
}
private String cpu = "A100";
public String cpu() {
return this.cpu;
}
public void cpu_$eq(String x$1) {
this.cpu = x$1;
}
private double screen = 6.1D;
public double screen() {
return this.screen;
}
public void screen_$eq(double x$1) {
this.screen = x$1;
}
private int rom = 128;
public int rom() {
return this.rom;
}
public void rom_$eq(int x$1) {
this.rom = x$1;
}
private int ram = 4;
public int ram() {
return this.ram;
}
public void ram_$eq(int x$1) {
this.ram = x$1;
}
}
public final class StdClass$ {
public static StdClass$ MODULE$;
public void main(String[] args) {
Phone phone = new Phone();
phone.cpu_$eq("123");
scala.Predef$.MODULE$.println(phone.cpu());
}
private StdClass$() {
MODULE$ = this;
}
}
图解
结论
public属性,底层实际为private访问属性
cpu时,在底层上是调用phone.cpu()方法,- 给属性
cpu赋值时,底层是调用phone.cpu_$eq("123");方法赋值的
所以 Scala 并不推荐将属性设为 private,再为其设置 public 的 get 和 set 方法
而是直接通过 对象名.属性名 来访问 或 赋值


