Java方法的局限,Java接口有的局限性,它良好而解决了这个问题
原标题: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接口有的局限性,它良好而解决了这个问题相关推荐
- java方法的构造,java方法与构造
public class StaticClass { static int i = 50; int y; // 构造只能有访问修饰符public.protected.private 修饰 (访问修饰符 ...
- beetl调用java方法_Beetl通过JAVA接口获取JAVA中的变量
标签: 模板语言绑定变量都是程序主动绑定到beetl,经过努力现在在beetl上实现了模板语言主动发出请求,来执行绑定. 最近做项目用到beetl,因为模板需要用到的变量很多,如果直接绑定,系统消耗很 ...
- 如何设置工作流到了某一节点自动执行java方法_2019年JAVA最常见面试题汇总(收藏)...
java基础以及多个"比较" 1.Collections.sort排序内部原理 在Java 6中Arrays.sort()和Collections.sort()使用的是MergeS ...
- python调用java方法_python调用java
一.环境确认: 首先,要确认安装的jdk版本是1.8以上:其次,jdk安装位数与python安装的位数一致,及要么一起64位版本要么一起32版本. (以上2点不满足均会报错,比如:not found ...
- java方法参数Bundle,Java ResourceBundle keySet()方法及示例
ResourceBundle类keySet()方法keySet()方法在java.util包中可用. keySet()方法用于从此ResourceBundle及其超级捆绑包中获取所有现有键,以在Set ...
- python调用java方法_python调用Java方法传入HashMap ArrayList
1.Java代码: package com; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap ...
- CC00033.bigdatajava——|Java方法封装.V15|——|Java.v15|费氏数列.v01|递归实现|
一.费氏数列的递归实现 ### --- 案例题目~~~ --> 编程实现费式数列中第n项的数值并返回. ~~~ --> 费式数列:1 1 2 3 5 8 13 21 -- 二.递归分析 三 ...
- CC00034.bigdatajava——|Java方法封装.V16|——|Java.v16|费氏数列.v02|递推实现|
一.费氏数列的递推实现 ### --- 案例题目~~~ --> 编程实现费式数列中第n项的数值并返回. ~~~ --> 费式数列:1 1 2 3 5 8 13 21 -- 二.递推实现原理 ...
- CC00037.bigdatajava——|Java方法封装.V19|——|Java.v19|封装实现.v02|
一.封装的实现 ### --- 封装的实现流程~~~ --> 私有化成员变量,使用private关键字修饰. ~~~ --> 提供公有的get和set方法,并在方法体中进行合理值的判断. ...
- java方法6_6.1 JAVA方法入门
for循环技巧: 10.fori 其中 10 为循环次数: 方法其实就是若干个语句的功能集合. 方法好比是一个工厂. 蒙牛工厂: 原料:奶牛.饲料.水 产出物:奶制品 钢铁工厂: 原料:铁矿石.煤炭 ...
最新文章
- Apple Pay和Samsung Pay可以支付BCH了
- 前戴尔EMC中国研究院院长创业:推出AI加速虚拟化平台,开发者可免费使用
- 3 镜像仓库Harbor安装
- Rustup 管理工具
- 浅谈流处理算法 (1) – 蓄水池采样
- 【数据结构基础笔记】【栈】
- php mysql foreach_php foreach输出两次
- FTP服务器软件 虚拟目录,FTP服务器软件 虚拟目录
- java线程属性_Java 并发 线程属性
- [bzoj2819]Nim
- 最新Activity与Fragment完全理解
- Web聊天室历史记录解决方案(轻喷。。)
- 永中文档转换服务Swagger调用说明
- 「案例分析」生鲜行业B2B供应链平台开发案例
- flask中基础模板templates
- 网速1mbps是多少兆?
- crontab、cron、at、atq、batch、ps命令练习题
- android 美团支付方式,美团外卖怎么用支付宝支付 美团用支付宝付款的设置方法...
- 灵活无处安放,所以选择流浪....《漆黑的空间》 《灰色轨迹》
- Python 3.6 使用wordcloud制作词云(可设背景图像)