【scala 笔记(7)】 Scala 扩展类、匿名子类、抽象类、样例类、密封类

扩展类

scala 扩展类的方式和Java一样, 使用 extends 关键字,例如:

class Person(val Name:String){
   
  def show() = {println("person name: " + Name)}
}

class Student(name:String) extends Person(name){
   

  private var id = 0
  // 重写字段
  override val Name: String = "[%s]".format(name)
  // 辅助构造器
  def this(name:String, id:Int){
    this(name)
    this.id = id
  }

  def learn() = {
    println("learn ... ")
  }
  // 重载方法
  def learn(language:String) = {
    println("learn language " + language)
  }
  // 重写方法
  override def show() = {
    println("student id: %d, name: %s".format(this.id, this.Name))
  }
}

声明Student 对象

scala> val s1 = new Student("borey")
s1: Student = Student@3878be7b

scala> s1.show
student id: 0, name: [borey]

scala> val s2 = new Student("borey"10076)
s2: Student = Student@10667848

scala> s2.learn
learn ... 

scala> s2 learn "scala"
learn language scala

scala> s2.show
student id: 10076, name: [borey]

上述样例包含知识点:

  • 使用extends进行类扩展, 也可以像Java一样把类声明为 final, 这样它就能被扩展;
  • 子类辅助构造器不能直接调用父类构造器; java中可以通用supper(param), scala 不行。
  • 类方法的重载和Java一样;
  • 类方法的重写,必须添加 override; Scala 中 重写一个 非抽象方法 必须使用override修饰符。
  • 类字段的重写,scala的类字段由一个私有字段和取值器/改值器方法构成(scala 类 setter和getter属性)。 你可以用另一个同名的val字段重写一个val(或一个不带参数的def),子类有一个私有字段和一个公有的getter方法, 而这个getter方法重写了超类的getter方法

可以看下 javap 反编译后 上述代码Java的定义:

prod@AWS-TEST-DT:~/borey_zhu/scala$ javap -p Person.class 
Compiled from "Person.scala"
public class Person {
  private final java.lang.String Name;
  public java.lang.String Name();
  public void show();
  public Person(java.lang.String);
}
prod@AWS-TEST-DT:~/borey_zhu/scala$ javap -p Student.class 
Compiled from "Person.scala"
public class Student extends Person {
  private int id;
  private final java.lang.String Name;
  private int id();
  private void id_$eq(int);
  public java.lang.String Name();
  public void learn();
  public void learn(java.lang.String);
  public void show();
  public Student(java.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值