Scala中关于继承的相关理解(抽象方法和抽象属性)

一、为了方便理解Scala中的继承,可以先大致回顾下Java中的抽象类概念。
1,什么是抽象?可以理解为不真实,不完整的事物。放在程序中,抽象就是指代码不完善。如果想使用这段程序,程序员就必须先完善这段代码。
2,为什么要有抽象?自然是为了方便扩展,我们可以把多个子类需要的共同性质的代码抽取出来,放在一个类中,这样,当我们需要时,只要继承这个类即可。而且我们可以根据不同的需求来重写这段代码,所以不应该将这段代码写死。
3,Java中的抽象类。Java中的抽象需要用abstract关键词来修饰,如果一个成员方法被修饰且没有方法体,那么这个方法就是抽象方法,抽象方法所在的类也必须是抽象类。反过来,抽象类中不一定需要含有抽象方法。
4,抽象类是无法被实例的,也就是创建对象,只有子类继承了该抽象类,并全部重写了所有抽象方法,子类才可以实例化。
5,抽象类也是可以单继承的,但是继承后如果不重写抽象方法,那么这个类同样是抽象类。

二,Scala中的抽象方法
1,声名方式 :def 方法名(参数列表):返回值类型
例: def test(name : String):String
2,也可以使用abstract修饰,但是可以省略
3,如果一个类中含有抽象方法,那么这个类也必须是抽象类,使用abstract修饰,反过来不一定。(和Java类似)
4,子类在继承抽象类后,如果想要实例化,须重写全部抽象方法。
5,如果子类想要重写抽象类中的非抽象方法(完整方法),需要在重写后的方法前面使用override修饰 (这里建议不论什么样的方法,重写都可以加关键词)
6,匿名实现类,如果子类没有重写抽象方法,就不可以实例化,但是可以new 匿名实现类,重写抽象方法,这种方式可以临时使用。

三,Scala中的抽象属性
1,同抽象方法类似,Scala中也有抽象属性,即没有完整声名的成员变量 ,例:var name : String
2,重写规则和方法一致,不再赘述。
3,注意事项:如果是抽象方法,var和val都可以使用。但是如果子类想要重写抽象类中的完整属性,那么必须使用val修饰符,并且使用override关键词修饰才可以。
4,原理:正常情况下,Scala文件在编译时,编译器会给属性私有化,并且提供公共的get、set方法,用于提供外界访问。
如果这个属性是抽象属性,那么此属性在编译时不会生成,也就是不存在这个属性,只会生成抽象的get、set方法。
子类在继承并重写方法后,就会重新声名此属性,并且重写抽象的get、set方法,这样,一个完整的属性才会出现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值