risc-v中文社区

 找回密码
 立即注册
查看: 1048|回复: 0

[原创] risc-v开发基础 Scala 责任链模式1---(17)

[复制链接]

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
发表于 2021-8-5 15:57:56 | 显示全部楼层 |阅读模式
在一个普通类的方法中用super调用父类的方法:
class Parent_Nor{
  def info(): Unit ={
    println("info")
  }
}
class NormalCls extends Parent_Nor {
  def disp(): Unit =
  {
    println("normalcls disp")
//    super.disp() //语法错误
    super.info() //只能调用父类中具有的方法
  }
}
很明显,父类无此disp方法,语法会出错,
abstract class Parent_Nor{
  def info(): Unit ={
    println("info")
  }
  def disp():Unit
}
class NormalCls extends Parent_Nor {
  def disp(): Unit =
  {
    println("normalcls disp")
    super.disp() //IDEA不会提示语法错误,但编译时会出现: method disp in class Parent_Nor is accessed from super. It may not be abstract unless it is overridden by a member declared `abstract' and `override'
  }
}
此时编译出错,是因为在子类的disp方法中调用了super.disp,而super本来就是一个抽象类,你此时调用抽象类中的这个抽象方法,肯定异常了
如果抽象类中disp是具体方法,而抽象类之所以是抽象类是因为类中有其它抽象方法或只为定义而定义成abstract类:
abstract class Parent_Nor{
  def info(): Unit ={
    println("info")
  }
  def disp():Unit ={} //空函数
}
class NormalCls extends Parent_Nor {
  override def disp(): Unit =
  {
    println("normalcls disp")
    super.disp() //OK   
  }
}
此时,编译执行都成功。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-5-3 15:51 , Processed in 0.020903 second(s), 17 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表