scala 用trait还是用abstract class

package com.scala.idle

object TraitOrAbstractClass {

def main(args: Array[String]): Unit = {

}

}

/**

* 继承两个trait,N多方便啊!

*/

class TestClass000 extends Trait000 with Trait001{

}

/**

* 继承两个abstract class,Error了。Error信息如下:

* Multiple markers at this line

- class AbstractClass001 needs to be a trait to be

mixed in

- class AbstractClass001 needs to be a trait to be

mixed in

*/

class TestClass001 extends AbstractClass000 with AbstractClass001{

}

/**

* 构造带参数的构造函数,trait,你可以吗?报错信息如下:

* traits or objects may not have parameters

* 但是abstract class是Ok的

*/

trait Trait003(i : Int){

}

/**

* 构造带参数的构造函数,abstract class 是Ok的

*/

abstract class AbstractClass003(i : Int){

}

trait Trait000{

def showTrait000 = {

println("showTrait000 ...")

}

}

trait Trait001{

def showTrait001 = {

println("showTrait001 ...")

}

}

abstract class AbstractClass000{

def showAbstractClass000 = {

println("showAbstractClass000 ...")

}

}

abstract class AbstractClass001{

def showAbstractClass001 = {

println("showAbstractClass001 ...")

}

}

时间: 2024-11-10 00:49:11

scala 用trait还是用abstract class的相关文章

Scala:trait

Scala开篇(目录) 在Scala中有一个trait类型,它可以被继承,而且支持多重继承,其实它更像我们熟悉的接口(interface),但它与接口又有不同之处是: trait中可以写方法的实现,interface不可以(java8开始支持接口中允许写方法实现代码了),这样看起来trait又很像抽象类(abstract),一会我们会通过反编译,看看Scala中对trait是怎样处理的,先来看看trait的使用. //声明一个 trait trait TraitBase{ def add(x:I

scala的trait执行报错: 错误: 找不到或无法加载主类 cn.itcast.scala.`trait`

scala的trait执行报错: 错误: 找不到或无法加载主类 cn.itcast.scala.`trait`.Children 原因:包名写成了trait,与trait关键字重名了: package cn.itcast.scala.`trait` 解决方法:将包名trait修改为其他名字,比如traits 原文地址:https://www.cnblogs.com/mediocreWorld/p/11368233.html

scala中trait学习笔记

scala中提供的trait(特质)和Java中的Interface有很多相似之处.都可以持有方法的声明和属性,但是trait还有比interface强大的多的其他用法. 1. trait可以带有方法实现: 2. trait与interface一样,可以互相继承.但是trait可以继承自某个类,但是这种特质只能够混入父类的子类中,不能随意混入: 3. trait中可以在运行时动态调用方法. 下面举一个trait使用的例子. 首先定义一个虚类IntQueue和特质Logger abstract c

关于scala的trait

最近一个月在学习scala,今天刚对trait有点感觉,所以记下来..... trait在scala中被称作特质,在我个人理解,trait就相当于java中interface和abstract class的结合体,又可以混入多个trait,又可以在trait写具体的方法实现,通过with这个trait,就可以在类里使用trait的方法,其他类在调用某个方法时,如果这个类里没有这个方法,则会去trait里找.而且Atrait混入了另一个Btrait,则所有混入Atrait的子类都拥有Btrait的

scala 14 trait

DT大数据梦工厂scala的所有视频.PPT和代码在百度云盘的链接:http://pan.baidu.com/share/home?uk=4013289088#category/type=0&qq-pf-to=pcqq.group <Scala深入浅出实战初级入门经典视频课程>http://edu.51cto.com/lesson/id-66538.html <Scala深入浅出实战中级进阶经典视频课程>http://edu.51cto.com/lesson/id-6713

【Scala篇】--Scala中Trait、模式匹配、样例类、Actor模型

一.前述 Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大. 模式匹配机制相当于java中的switch-case. 使用了case关键字的类定义就是样例类(case classes),样例类是种特殊的类. Actor相当于Java中的多线程. 二.具体阐述 trait特性 1.概念理解 Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大. 与接口不同的是,它还可以定义属性和方法的实现. 一般情况下Scala的类可以继承多个Tra

scala中Trait简单使用

trait Log { def log(message:String) = println("log:" + message) } /** * 为实例混入trait * */ trait Logs{ def log(message:String){} } trait MyLog extends Logs { override def log(message: String): Unit = { println("log:" + message) } } class

Scala trait

trait logger{ def log(msg : String)} //继承的第一个trait用extends关键字,其余的用with 连接 class ConcreteLogger extends logger with Cloneable{ override def log(msg : String) = { println("log log") }} //AnotherLogger一定要继承logger,否则不能混入 trait AnotherLogger extends

scala中的trait

这里的trait字面意思是特质或者特征,这个词翻译成特征比较合适.它的意义和java,c#中接口很类似.但是trait支持部分实现,也就是说可以在scala的trait中可以实现部分方法. 下面我们以一个具体的例子来介绍下trait的使用. 我们的例子中定义了一个抽象类Aminal表示所有的动物,然后定义了两个trait Flyable和Swimable分别表示会飞和会游泳两种特征. 我们先看下Aminmal的实现: abstract class Animal { def walk(speed: