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//隐式吧上面的变量传进来
}
}

最新文章

  1. BRISK: Binary Robust Invariant Scalable Keypoints
  2. 如何退出调起多个Activity的Application?
  3. RobotFramework 安装配置(一)
  4. placeholder在不同浏览器下的表现及兼容方法(转)
  5. 暴雪hash算法
  6. python正则的中文处理
  7. java中运算符——进度1
  8. oschina插件和扩展
  9. 【Saltstack】Saltstack简单说明
  10. JS 图片放大镜
  11. elasticsearch 踩坑
  12. 关于get和post请求的区别
  13. 谷歌开源的一个BTREE实现 Go语言
  14. 用命令bat打开某个文件或文件夹
  15. Java多线程编程——并发编程原理(分布式环境中并发问题)
  16. Docker命令之 build
  17. The First Android App----Starting Another Activity
  18. winform npoi excel 样式设置
  19. PL/SQL配置oracle客户端,登录远程数据库配置
  20. python全栈开发从入门到放弃之递归函数的调用

热门文章

  1. ES6 javascript 实用开发方法技巧分享
  2. “但行好事 莫问前程 只问耕耘 不问收获 成功不必在我 而功力必不唐捐” 科技袁人·年终盛典——5G是科技时代非常重要的基础设施
  3. C/C++笔试基础知识
  4. ip routing 开启三层路由模式
  5. Fastjson反序列化漏洞
  6. 洛谷 题解 P2119【魔法阵】
  7. python字典改变value值方法总结
  8. S02_CH05_UBOOT实验Enter a post title
  9. 第三章 VIVADO 自定义IP 流水灯实验
  10. 简单分析synchronized不会锁泄漏的原因