一 、类和对象的使用
Simple App{
def main(args: Array[String]): Unit = {
var person = new People()
person.name = \"Messi\"
println(person.name+\"..\"+person.age)
println(person.eat())
person.watchFootball(\" 火箭 \")
}
}
/**
* 定义一个People类
*/
class People{
//定义属性,scala中自动生成set get 方法
var name:String = \"\"
//也可以使用一个 下划线占位符
// var name:String =_
val age:Int = 10
//使用private [this] 修饰的属性 只能在本来中使用
private [this] val gender = \"male\";
//方法
def eat(): String ={
name +\" eat ....\"
}
def watchFootball(teamName:String): Unit ={
println(name+\" is watching match of\"+teamName)
}
def printInfo(): Unit ={
println(gender)
}
}
二、主构造器、附属构造器、继承、重写
package com.dzx
/**
* @author DuanZhaoXu
* @ClassName:
* @De ion: 主构造器,附属构造器,继承 ,重写
* @date 2018年12月18日 09:47:11
*/
ConstructorApp {
def main(args: Array[String]): Unit = {
val zhangSan = new People1(\"张三\",20)
println(zhangSan.name+\",\"+zhangSan.age+\",\"+zhangSan.school)
val liSi = new People1(\"李四\",20,\"100\")
println(liSi.name+\",\"+liSi.age+\",\"+liSi.gender)
var student = new Student(\"王五\",10,\"英文\")
println(student.name +\",\"+student.age+\",\"+student.major)
println(student.toString)
}
}
//主构造器
class People1(var name:String,var age:Int){
println(\"enter start。。。。\")
var school = \"ustc\"
var gender:String =_
//附属构造器
def this(name:String,age:Int,gender:String){
this(name,age) //附属构造器的第一行代码必须要调用主构造器或者其他的附属构造器
this.gender =gender
}
println(\"leave end 。。。。\")
//使用override 重写 toString 方法
override def toString = s\"People1($school, $gender, $name, $age)\"
}
//子类集成父类,继承的属性,不再需要写var 或者 val,自身特有的属性 才需要加上var 或者 val
class Student (name: String,age:Int,val major:String) extends People1(name ,age){
println(\"student enter start。。。。\")
println(\"student leave end 。。。。\")
//使用override 重写toString 方法
override def toString = s\"Student($major)\"
}
三、抽象类的使用
package com.dzx
/**
* @author DuanZhaoXu
* @ClassName:
* @De ion: 抽象类的使用
* @date 2018年12月18日 10:37:27
*/
AbstractApp {
def main(args: Array[String]): Unit = {
var xiaoming = new Student2
xiaoming.name = \"小明\"
xiaoming.age = 12
println(xiaoming.name + \",\" + xiaoming.age)
}
}
/**
* 类的一个或者多个方法 没有完整的实现(只有定义,没有实现)
*/
abstract class Person2 {
def speak(say: String)
var name: String
var age: Int
}
class Student2 extends Person2 {
override def speak(say: String): Unit = {
println(name + \" speaking ...\")
}
override var name: String = \"\"
override var age: Int = 0
}
四、伴生类、伴生对象、apply方法的用法
package com.dzx
/**
* @author DuanZhaoXu
* @ClassName:
* @De ion: 伴生类和伴生对象
* @date 2018年12月18日 10:50:34
*/
/**
* 伴生类和伴生对象
* 如果有一个class ,还有一个与class 同名的
* 那么就称这个 是 class的伴生对象,
* class 是 的伴生类
*/
ApplyTest{
def main(args: Array[String]): Unit = {
//伴生对象的使用
ApplyApp.incr
println(ApplyApp.count)
for (i<-1 to 10){
ApplyApp.incr
}
println(ApplyApp.count)
var b = ApplyApp() //类名() 调用的是 伴生对象的 apply 方法
var c = new ApplyApp()
c() //对象名() 调用的是伴生类 的 apply方法
}
}
class ApplyApp {
def apply() = {
println(\"走了伴生类的apply 方法\")
}
}
ApplyApp{
println(\"start\")
var count = 0
def incr ={
count +=1
}
println(\"end\")
//最佳实践,在伴生对象的 apply 方法
def apply():ApplyApp = {
println(\"走了伴生对象的apply 方法\")
new ApplyApp
}
}
五、case class
package com.dzx
/**
* @author DuanZhaoXu
* @ClassName:
* @De ion:
* @date 2018年12月18日 14:08:49
*/
//case class 通常用在 模式匹配里面
CaseClassApp {
def main(args: Array[String]): Unit = {
println(Dog(\"小狗\").name) //case class 不需要new 就可以声明一个 dog对象
}
}
case class Dog(name: String) {
var age: Int = _
}
六、trait 的用法(类似于java中的interface接口)
package com.dzx
/**
* train 定义一个 接口,类似于java中的interface
* 当我们需要 实现接口的 时候 ,第一个接口 使用 extends,后面的需要实现的trait 则使用 with 连接
* extends Atrait with Btrait
*
* class SparkConf(loadDefaults : scala.Boolean)
* extends java.lang.
* with scala.Cloneable with org.apache.spark.internal.Logging
* with scala.Serializable
*/
TraitApp{
def main(args: Array[String]): Unit = {
val traitApp = new TraitApp()
println(traitApp.add(2,3))
println(traitApp.decr(10,5))
}
}
class TraitApp extends userDao with personDao {
override def add(x: Int, y: Int): Int = {
x + y
}
override def decr(x: Double, y: Double): Double ={
x-y
}
}
trait userDao extends Serializable{
def add(x:Int,y:Int):Int
}
trait personDao extends Serializable{
def decr(x:Double,y:Double):Double
}
继续阅读与本文标签相同的文章
上一篇 :
工业物联网的市场到底有多大
-
曾经风靡一时的360安全卫士为什么如今没落了?
2026-05-18栏目: 教程
-
用C语言编程,如何节省存储空间?
2026-05-18栏目: 教程
-
三元牛奶,的优势在哪里?
2026-05-18栏目: 教程
-
常浏览“成人网站”要留意了,有这2种反应,请立马关闭
2026-05-18栏目: 教程
-
美国SpaceX公司计划向太空发射4.2万枚通信卫星
2026-05-18栏目: 教程
