scala学习手记13 - 类继承
2016-06-16 22:29
344 查看
在scala里,类继承有两点限制:
重写方法需要使用override关键字;
只有主构造函数才能往父类构造函数中传参数。
在java1.5中引入了override注解,但不强制使用。不过在scala中要想重写方法必须使用override关键字。如果确实重写了父类的方法又不使用override关键字的话,则会在编译时报错,提示没有使用override修饰符。
scala的副构造函数必须调用主构造函数或是另一个副构造函数。只有在主构造函数中才能向父类的构造函数中传递数据。可以看出来主构造函数如同父类和子类中间的一道关卡:它既负责完成子类的初始化,也负责与父类的沟通。
下面的这段代码演示了下上述内容:
在代码中定义了两个类:Vehicle和Car。Car继承了Vehicle。在继承的时候,因为要向父类传递参数,所以Car类主构造函数的一部分必须能匹配父类的构造函数。因为Car类构造函数中的id和year两个成员变量源自父类Vehicle,所以需要使用override关键字修饰。此外,因为这两个类都重写了java.lang.Object的toString方法,所以重写的方法前面需要使用override关键字修饰。
看一下执行结果:
就这样!
###########
重写方法需要使用override关键字;
只有主构造函数才能往父类构造函数中传参数。
在java1.5中引入了override注解,但不强制使用。不过在scala中要想重写方法必须使用override关键字。如果确实重写了父类的方法又不使用override关键字的话,则会在编译时报错,提示没有使用override修饰符。
scala的副构造函数必须调用主构造函数或是另一个副构造函数。只有在主构造函数中才能向父类的构造函数中传递数据。可以看出来主构造函数如同父类和子类中间的一道关卡:它既负责完成子类的初始化,也负责与父类的沟通。
下面的这段代码演示了下上述内容:
class Vehicle(val id: Int, val year: Int) { override def toString(): String = "ID: " + id + " Year: " + year } class Car(override val id: Int, override val year: Int, var fuelLevel: Int) extends Vehicle(id, year) { override def toString(): String = super.toString() + " Fuel Level: " + fuelLevel } val car = new Car(1, 2009, 100) println (car)
在代码中定义了两个类:Vehicle和Car。Car继承了Vehicle。在继承的时候,因为要向父类传递参数,所以Car类主构造函数的一部分必须能匹配父类的构造函数。因为Car类构造函数中的id和year两个成员变量源自父类Vehicle,所以需要使用override关键字修饰。此外,因为这两个类都重写了java.lang.Object的toString方法,所以重写的方法前面需要使用override关键字修饰。
看一下执行结果:
就这样!
###########
相关文章推荐
- SQL服务器无法登陆SQL控制台
- 168. Excel Sheet Column Title
- 豆瓣最受欢迎的影评爬虫(第一个爬虫撒花!)
- 数组去重
- 【C】文件读写操作
- python 查询 MongoDB 数据库pymongo.errors.OperationFailure: cursor id '26777532088498352' not valid at se
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- SQL注入原理讲解
- Educational Codeforces Round 13
- 每天一道ACM(四)
- centos linux中怎么查看和修改计算机名/etc/sysconfig/network
- 【一天一道LeetCode】#94. Binary Tree Inorder Traversal
- php mysql_insert_id()
- 【一天一道LeetCode】#94. Binary Tree Inorder Traversal
- centos linux中怎么查看和修改计算机名/etc/sysconfig/network
- 如何实现 javascript “同步”调用 app 代码
- 一个关于Map的旅程
- python
- 面向对象思想(一)