原标题:Java接口有的局限性,它良好而解决了这个问题

简介

scala和java语言一样,采用了很强的限制策略,避免了多种继承的问题。在java语言中,只允许继承一个超类,该类可以实现多个接口,但java接口有其自身的局限性:接口中只能包括抽象方法,不能包含字段、具体方法。Scala语言利用Trait解决了该问题,在scala的trait中,它不但可以包括抽象方法还可以包含字段和具体方法。

简单实例

``` trait MysqlDAO{ def add(o:Any):Boolean def update(o:Any):Int def query(id:String):List[Any] }

//继承单个trait class DaoImpl extends MysqlDAO{ def add(o:Any):Boolean=true def update(o:Any):Int= 1 def query(id:String):List[Any]=List(1,2,3) }

//继承多个trait class DaoImpl extends MysqlDAO with Cloneable{ def add(o:Any):Boolean=true def update(o:Any):Int= 1 def query(id:String):List[Any]=List(1,2,3) } ```

多种使用方式

类似java接口的trait

//trait定义演示 trait DAO{ //定义一个抽象方法,注意不需要加abstract //加了abstract反而会报错 def delete(id:String):Boolean def add(o:Any):Boolean def update(o:Any):Int def query(id:String):List[Any] }

带具体实现的trait

trait DAO{ //delete方法有具体实现 def delete(id:String):Boolean={ println("delete implementation") true } def add(o:Any):Boolean def update(o:Any):Int def query(id:String):List[Any] }

带抽象字段的trait

``` trait DAO{ var recodeMount:Long

def delete(id:String):Boolean={ println("delete implementation") true } def add(o:Any):Boolean def update(o:Any):Int def query(id:String):List[Any] } ```

具体字段的trait

``` trait DAO{ var recodeMount:Long=15000000000000L

def delete(id:String):Boolean={ println("delete implementation") true } def add(o:Any):Boolean def update(o:Any):Int def query(id:String):List[Any] } ```

构造顺序

如果有超类,则先调用超类的构造器

如果有父trait,它会按照继承层次先调用父trait的构造器

如果有多个父trait,则按顺序从左到右执行

所有父类构造器和父trait被构造完之后,才会构造本类

class Person class Student extends Person with FileLogger with Cloneable 上述构造器的执行顺序为: 1 首先调用父类Person的构造器 2 调用父trait Logger的构造器 3 再调用trait FileLogger构造器,再然后调用Cloneable的构造器 4 最后才调用Student的构造器返回搜狐,查看更多

责任编辑:

Java方法的局限,Java接口有的局限性,它良好而解决了这个问题相关推荐

  1. java方法的构造,java方法与构造

    public class StaticClass { static int i = 50; int y; // 构造只能有访问修饰符public.protected.private 修饰 (访问修饰符 ...

  2. beetl调用java方法_Beetl通过JAVA接口获取JAVA中的变量

    标签: 模板语言绑定变量都是程序主动绑定到beetl,经过努力现在在beetl上实现了模板语言主动发出请求,来执行绑定. 最近做项目用到beetl,因为模板需要用到的变量很多,如果直接绑定,系统消耗很 ...

  3. 如何设置工作流到了某一节点自动执行java方法_2019年JAVA最常见面试题汇总(收藏)...

    java基础以及多个"比较" 1.Collections.sort排序内部原理 在Java 6中Arrays.sort()和Collections.sort()使用的是MergeS ...

  4. python调用java方法_python调用java

    一.环境确认: 首先,要确认安装的jdk版本是1.8以上:其次,jdk安装位数与python安装的位数一致,及要么一起64位版本要么一起32版本. (以上2点不满足均会报错,比如:not found ...

  5. java方法参数Bundle,Java ResourceBundle keySet()方法及示例

    ResourceBundle类keySet()方法keySet()方法在java.util包中可用. keySet()方法用于从此ResourceBundle及其超级捆绑包中获取所有现有键,以在Set ...

  6. python调用java方法_python调用Java方法传入HashMap ArrayList

    1.Java代码: package com; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap ...

  7. CC00033.bigdatajava——|Java方法封装.V15|——|Java.v15|费氏数列.v01|递归实现|

    一.费氏数列的递归实现 ### --- 案例题目~~~ --> 编程实现费式数列中第n项的数值并返回. ~~~ --> 费式数列:1 1 2 3 5 8 13 21 -- 二.递归分析 三 ...

  8. CC00034.bigdatajava——|Java方法封装.V16|——|Java.v16|费氏数列.v02|递推实现|

    一.费氏数列的递推实现 ### --- 案例题目~~~ --> 编程实现费式数列中第n项的数值并返回. ~~~ --> 费式数列:1 1 2 3 5 8 13 21 -- 二.递推实现原理 ...

  9. CC00037.bigdatajava——|Java方法封装.V19|——|Java.v19|封装实现.v02|

    一.封装的实现 ### --- 封装的实现流程~~~ --> 私有化成员变量,使用private关键字修饰. ~~~ --> 提供公有的get和set方法,并在方法体中进行合理值的判断. ...

  10. java方法6_6.1 JAVA方法入门

    for循环技巧: 10.fori 其中 10 为循环次数: 方法其实就是若干个语句的功能集合. 方法好比是一个工厂. 蒙牛工厂: 原料:奶牛.饲料.水 产出物:奶制品 钢铁工厂: 原料:铁矿石.煤炭 ...

最新文章

  1. Apple Pay和Samsung Pay可以支付BCH了
  2. 前戴尔EMC中国研究院院长创业:推出AI加速虚拟化平台,开发者可免费使用
  3. 3 镜像仓库Harbor安装
  4. Rustup 管理工具
  5. 浅谈流处理算法 (1) – 蓄水池采样
  6. 【数据结构基础笔记】【栈】
  7. php mysql foreach_php foreach输出两次
  8. FTP服务器软件 虚拟目录,FTP服务器软件 虚拟目录
  9. java线程属性_Java 并发 线程属性
  10. [bzoj2819]Nim
  11. 最新Activity与Fragment完全理解
  12. Web聊天室历史记录解决方案(轻喷。。)
  13. 永中文档转换服务Swagger调用说明
  14. 「案例分析」生鲜行业B2B供应链平台开发案例
  15. flask中基础模板templates
  16. 网速1mbps是多少兆?
  17. crontab、cron、at、atq、batch、ps命令练习题
  18. android 美团支付方式,美团外卖怎么用支付宝支付 美团用支付宝付款的设置方法...
  19. 灵活无处安放,所以选择流浪....《漆黑的空间》 《灰色轨迹》
  20. Python 3.6 使用wordcloud制作词云(可设背景图像)

热门文章

  1. Vert.x 异步访问数据库 MySQL
  2. OpenStack手动制作CentOS 7 KVM镜像
  3. jquery ajax 请求中多出现一次OPTIONS请求及其解决办法
  4. 通过机器学习神经网络自动写前端代码
  5. .NET/C# 优化心得
  6. C++ map的基本操作和使用
  7. The freeze_support() line can be omitted
  8. Transformer预训练模型已经变革NLP领域,一文概览当前现状
  9. mysql基础3-数据表的相关操作1
  10. 李宏毅机器学习——深度学习的Tips