Scala快速入门(四)——继承、接口
2024-09-04 22:37:52
Scala快速入门(四)——继承、接口
一、继承
1.继承的概念:省略
2.模板:
class Person(n:String,a:Int) {
var name:String=n
var age:Int=a
def showInfo():Unit={
println("学生信息如下")
println("名字:"+name)
println("年龄:"+age)
}
}
class Student(n:String,a:Int) extends Person(n,a){
def study():Unit={
println(this.name+". Im learning scala. ")
}
}
3.方法的重写
直接在方法之前用override进行修饰
案例:
class OverRideTest {
def print(): Unit ={
println("print")
}
}
class ExtendOver extends OverRideTest {
override def print(): Unit = {
println("aaa")
}
}
object Over{
def main(args: Array[String]): Unit = {
val ex=new ExtendOver
ex.print()
}
}
二、关于类和强制转换
1.获取Class对象
Java中,获取String的Class对象
Class clazz=String.class
Scala中
val clazz=classOf[String]
2.关于obj.isInstanceOf[T]类似Java中obj instanceof T
println("".isInstanceOf[String])
3.关于强制转换obj.asInstanceOf[T]类似Java中的(T)obj
println(1.0.asInstanceOf[Int])
三、抽象类
抽象类中有抽象字段也有普通字段,抽象类中只有抽象方法,下面是一个案例
abstract class Animal{
var name:String
var age:Int
def toString()
}
类的实现
class Dog extends Animal{
override var name: String = (){
println("")
}
override var age: Int = _
}
四、匿名子类
假设只会在本类使用到这个类的方法,那么我们可以使用匿名子类功能
val animal=new Animal(){
var name:String=_
var age:Int=_
override def toString(): Unit ={
println("prprpr")
}
}
五、接口
trait为接口,接口实例
trait talk{
def say(): Unit ={
println("say")
}
}
trait loud{
def hey(): Unit ={
println("hey")
}
}
class Test extends loud with talk{
def test: Unit ={
println("test")
}
}
object run{
def main(args: Array[String]): Unit = {
val t=new Test
t.hey
t.say
t.test
}
}
六、case class
class Dog(name:String,age:Int){}
object run{
def main(args: Array[String]): Unit = {
val hashiqi=new Dog("hashiqi",1);
val hashiqi2=new Dog("hashiqi",1);
println(hashiqi==hashiqi2)//false
println(hashiqi.equals(hashiqi2))//false
}
}
把class改成case class,那么比较都为true
七、迭代器
object run{
def main(args: Array[String]): Unit = {
val tup:(Double,Int,String,Boolean,Char)=(1.0,88,"abc",false,'a')
val iter:Iterator[Any] = tup.productIterator
val res=iter.map((x)=>{
x match {
case o:Int=> println(s"${o+1}")
case "abc"=> println("99")
case _ => println("??")//相当于default
}
});
while(res.hasNext) res.next()
}
}
八、偏函数
限定传入值进行分类处理
object run{
def main(args: Array[String]): Unit = {
def xxx:PartialFunction[Any,String]={
case "Hi" => "hello"
case x:Int=> s"$x.. is int"
case _ => "none"
}
println(xxx(444))
}
}
九、隐式转换
object run{
def main(args: Array[String]): Unit = {
implicit val a="aaa"
def aaa(implicit name:String):Unit={
println(name)
}
aaa//隐式吧上面的变量传进来
}
}
最新文章
- BRISK: Binary Robust Invariant Scalable Keypoints
- 如何退出调起多个Activity的Application?
- RobotFramework 安装配置(一)
- placeholder在不同浏览器下的表现及兼容方法(转)
- 暴雪hash算法
- python正则的中文处理
- java中运算符——进度1
- oschina插件和扩展
- 【Saltstack】Saltstack简单说明
- JS 图片放大镜
- elasticsearch 踩坑
- 关于get和post请求的区别
- 谷歌开源的一个BTREE实现 Go语言
- 用命令bat打开某个文件或文件夹
- Java多线程编程——并发编程原理(分布式环境中并发问题)
- Docker命令之 build
- The First Android App----Starting Another Activity
- winform npoi excel 样式设置
- PL/SQL配置oracle客户端,登录远程数据库配置
- python全栈开发从入门到放弃之递归函数的调用
热门文章
- ES6 javascript 实用开发方法技巧分享
- “但行好事 莫问前程 只问耕耘 不问收获 成功不必在我 而功力必不唐捐” 科技袁人·年终盛典——5G是科技时代非常重要的基础设施
- C/C++笔试基础知识
- ip routing 开启三层路由模式
- Fastjson反序列化漏洞
- 洛谷 题解 P2119【魔法阵】
- python字典改变value值方法总结
- S02_CH05_UBOOT实验Enter a post title
- 第三章 VIVADO 自定义IP 流水灯实验
- 简单分析synchronized不会锁泄漏的原因