在一个普通类的方法中用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
}
}
此时,编译执行都成功。