Scala 面向对象(二):package 包 (一) 入门
1 Scala包的基本介绍
和Java一样,Scala中管理项目可以使用包,但Scala中的包的功能更加强大,使用也相对复杂些,下面我们学习Scala包的使用和注意事项。
2 Scala包快速入门
使用打包技术来解决上面的问题,不同包下Dog类
package com.atguigu.chapter02.xh
class Cat {
}
package com.atguigu.chapter02.xm
class Cat {
}
var cat1 = new com.atguigu.chapter02.xh.Cat()
println("cat1" + cat1)
var cat2 = new com.atguigu.chapter02.xm.Cat()
println("cat2" + cat2)
3 Scala包的特点概述
基本语法
package 包名
Scala包的三大作用(和Java一样)
1) 区分相同名字的类2) 当类很多时,可以很好的管理类3) 控制访问范围
Scala中包名和源码所在的系统文件目录结构要可以不一致,但是编译后的字节码文件路径和包名会保持一致(这个工作由编译器完成)
4 Scala包的命名
命名规则
只能包含数字、字母、下划线、小圆点.,但不能用数字开头, 也不要使用关键字。 demo.class.exec1 //错误 , 因为class是关键字demo.12a // 错误,因为不能以数字开头
命名规范:
一般是小写字母+小圆点一般是 com.公司名.项目名.业务模块名
比如:com.atguigu.oa.model
com.atguigu.oa.controller
com.sina.edu.user com.sohu.bank.order
5 Scala会自动引入的常用包
java.lang.*
scala包
Predef包
Scala包注意事项和使用细节
1)scala进行package 打包时,可以有如下形式。
2)包也可以像嵌套类那样嵌套使用(包中有包), 这个在前面的第三种打包方式已经讲过了,在使用第三种方式时的好处是:程序员可以在同一个文件中,将类(class / object)、trait 创建在不同的包中,这样就非常灵活了。
3)作用域原则:可以直接向上访问。即: Scala中子包中直接访问父包中的内容, 大括号体现作用域。(提示:Java中子包使用父包的类,需要import)。在子包和父包 类重名时,默认采用就近原则,如果希望指定使用某个类,则带上包名即可。
package com.atguigu{
//这个类就是在com.atguigu包下
class User{
}
//这个类对象就是在Monster$ , 也在com.atguigu包下
object Monster {
}
class Dog {
}
package scala {
//这个类就是在com.atguigu.scala包下
class User{
}
//这个Test 类对象
object Test {
def main(args: Array[String]): Unit = {
//子类可以直接访问父类的内容
var dog = new Dog()
println("dog=" + dog)
//在子包和父包 类重名时,默认采用就近原则.
var u = new User()
println("u=" + u)
//在子包和父包 类重名时,如果希望指定使用某个类,则带上包路径
var u2 = new com.atguigu.User()
println("u2=" + u2)
}
}
}
}
4) 父包要访问子包的内容时,需要import对应的类等
package com.atguigu{
//引入在com.atguigu 包中希望使用到子包的类Tiger,因此需要引入.
import com.atguigu.scala.Tiger
//这个类就是在com.atguigu包下
class User{
}
package scala {
//Tiger 在 com.atguigu.scala 包中
class Tiger {}}
object Test2 {
def main(args: Array[String]): Unit = {
//如果要在父包使用到子包的类,需要import
val tiger = new Tiger()
println("tiger=" + tiger)
}}}
5)可以在同一个.scala文件中,声明多个并列的package(建议嵌套的pakage不要超过3层)
6)包名可以相对也可以绝对,比如,访问BeanProperty的绝对路径是:_root_. scala.beans.BeanProperty ,在一般情况下:我们使用相对路径来引入包,只有当包名冲突时,使用绝对路径来处理。
package com.atguigu.scala2
class Manager( var name : String ) {
//第一种形式
//@BeanProperty var age: Int = _
//第二种形式, 和第一种一样,都是相对路径引入
//@scala.beans.BeanProperty var age: Int = _
//第三种形式, 是绝对路径引入,可以解决包名冲突
@_root_. scala.beans.BeanProperty var age: Int = _
}
object TestBean {
def main(args: Array[String]): Unit = {
val m = new Manager("jack")
println("m=" + m)
}}
Scala 面向对象(二):package 包 (一) 入门的更多相关文章
- JavaSE入门学习17:Java面向对象之package(包)
一Java包(package) 为了更好地组织类,Java提供了包机制,用于差别类名的命名空间. 包的作用: A把功能类似或相关的类或接口组织在 ...
- 大数据笔记(二十四)——Scala面向对象编程实例
===================== Scala语言的面向对象编程 ======================== 一.面向对象的基本概念:把数据和操作数据的方法放到一起,作为一个整体(类 c ...
- [.net 面向对象程序设计进阶] (6) Lamda表达式(二) 表达式树快速入门
[.net 面向对象程序设计进阶] (6) Lamda表达式(二) 表达式树快速入门 本节导读: 认识表达式树(Expression Tree),学习使用Lambda创建表达式树,解析表达式树. 学习 ...
- 廖雪峰Java2面向对象编程-5包和classpath-1包package
1.package的意义 如下,存在多个相同类名的文件.当引用Person类,将无法确定引用小红,还是小明的Person类,即同名类的冲突. 小明的Person类:Person 小红的Person类: ...
- Scala——面向对象和函数式编程语言
Scala Scala是一门运行时基于JVM的编程语言,具备函数式编程和面向对象特点. 基本知识 basics 任意词均可作为符号名,对于关键词,以反引号包裹,避免使用下划线,避免带美元符的名字. 声 ...
- 7. Scala面向对象编程(中级部分)
7.1 包 7.1.1 看一个应用场景 现在有两个程序员共同开发一个项目,程序员xiaoming希望定义一个类取名Dog,程序员xiaohong也想定一个类也叫Dog,两个程序员还为此吵了起来,该怎么 ...
- ROS机器人程序设计(原书第2版)补充资料 (捌) 第八章 导航功能包集入门 navigation
ROS机器人程序设计(原书第2版)补充资料 (捌) 第八章 导航功能包集入门 navigation 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中 ...
- 批量修改Java类文件中引入的package包路径
http://libeey.blogbus.com/logs/101848958.html当复制其他工程中的包到新工程的目录中时,由于包路径不同,出现红叉,下面的类要一个一个修改包路径,类文件太多的话 ...
- (转)MyBatis框架的学习(二)——MyBatis架构与入门
http://blog.csdn.net/yerenyuan_pku/article/details/71699515 MyBatis框架的架构 MyBatis框架的架构如下图: 下面作简要概述: S ...
随机推荐
- 关于一个服务和api监控的界面,涉及ajax-jsonp,promise应用
<!DOCTYPE html> <html class="mobile hairline" data-dpr=""> <head& ...
- TensorFlow从0到1之TensorFlow Keras及其用法(25)
Keras 是与 TensorFlow 一起使用的更高级别的作为后端的 API.添加层就像添加一行代码一样简单.在模型架构之后,使用一行代码,你可以编译和拟合模型.之后,它可以用于预测.变量声明.占位 ...
- (九)HttpClient获取cookies
原文链接:https://blog.csdn.net/cheny1p1ng/article/details/90780024 旧版本DefaultHttpClient 使用getCookieStore ...
- 恕我直言你可能真的不会java第3篇:Stream的Filter与谓词逻辑
一.基础代码准备 建立一个实体类,该实体类有五个属性.下面的代码使用了lombok的注解Data.AllArgsConstructor,这样我们就不用写get.set方法和全参构造函数了.lombok ...
- C语言实现类
#ifndef __DEFINE__H__ #define __DEFINE__H__ #define vector3(type) \ typedef struct vector3_##type { ...
- opencv C++构造并访问单通道和多通道Mat。
一:构造并访问单通道. int main(){ cv::Mat m=(cv::Mat_<int>(3,2)<<1,2,3,4,5,6); for(int i=0;i<m. ...
- 【初学Java学习笔记】AOP与OOP
AOP(Aspect Oriented Programming) 面向切面编程,是属于Spring框架中的内容.AOP相当于OOP的补充,当我们需要对多个对象引入一个公共行为,比如日志,操作记录等,就 ...
- python黑帽子之tcp服务端
试着用python创建一个标准的多线程tcp服务器 import socket import threading bind_ip = "0.0.0.0" bind_port = 8 ...
- centos 7 增加永久静态路由
1 在 /etc/sysconfig/network-scripts/ 目录下添加route-eth3,eth3为实际网卡名称. [root@compute1 ~]# cat /etc/sysconf ...
- 前端开发神器Charles从入门到卸载
前言 本文将带大家学习使用前端开发神器-charles,从基本的下载安装到常见配置使用,为大家一一讲解. 一.花式夸奖Charles 截取 Http 和 Https 网络封包. 支持重发网络请求,方便 ...