feat:线下课:面向对象_类、对象、访问权限、伴生对象、特质与混入
This commit is contained in:
@@ -0,0 +1,45 @@
|
|||||||
|
package chapter3
|
||||||
|
|
||||||
|
object Demo1Class {
|
||||||
|
|
||||||
|
def main(args: Array[String]): Unit = {
|
||||||
|
val xiaoming:Demo_class_person = new Demo_class_person()
|
||||||
|
xiaoming.greet("小明",18)
|
||||||
|
// 每次打招呼都传入名字,很奇怪,名字应该是特定对象的特有属性
|
||||||
|
// xiaoming.greet("小红",18)
|
||||||
|
|
||||||
|
xiaoming.run("小明")
|
||||||
|
println("=================")
|
||||||
|
val xiaohong = new Demo_class_Person1("小红")
|
||||||
|
xiaohong.greet(20)
|
||||||
|
xiaohong.run()
|
||||||
|
|
||||||
|
|
||||||
|
// println(NAME)
|
||||||
|
// saySomething()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
class Demo_class_person {
|
||||||
|
|
||||||
|
def greet(name:String,age:Int):Unit = {
|
||||||
|
println(s"我的名字叫${name},我今年${age}岁了")
|
||||||
|
}
|
||||||
|
|
||||||
|
def run(name:String):Unit = {
|
||||||
|
println(s"${name}正在跑步")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 构造方法
|
||||||
|
class Demo_class_Person1(val name:String) {
|
||||||
|
def greet(age:Int):Unit = {
|
||||||
|
println(s"我的名字叫${name},我今年${age}岁了")
|
||||||
|
}
|
||||||
|
|
||||||
|
def run():Unit = {
|
||||||
|
println(s"${name}正在跑步")
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
package chapter3
|
||||||
|
|
||||||
|
object Demo2Accessible {
|
||||||
|
def main(args: Array[String]): Unit = {
|
||||||
|
val person = new Demo2_accessible_person()
|
||||||
|
// 如果属性被private修饰,说明这个属性是私有的,被隐藏起来,在类的外部是无法访问的
|
||||||
|
// println(s"person.idCard = ${person.idCard}")
|
||||||
|
person.printInfo()
|
||||||
|
// 如果属性被protected修饰,说明这个属性是被保护的,被隐藏起来,在类的外部是无法访问的
|
||||||
|
// println(s"person.name = ${person.name}")
|
||||||
|
println(s"person.sex = ${person.sex}")
|
||||||
|
println(s"person.age = ${person.age}")
|
||||||
|
|
||||||
|
|
||||||
|
// println(NAME)
|
||||||
|
// saySomething()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
object Demo2_accessible_person{
|
||||||
|
def test():Unit = {
|
||||||
|
val person = new Demo2_accessible_person()
|
||||||
|
// 虽然是private,但是伴生对象还是可以访问到,可以理解为伴生对象中的访问就是在类的内部
|
||||||
|
println(s"idCard = ${person.idCard}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
class Demo2_accessible_person {
|
||||||
|
private var idCard: String = "123456x"
|
||||||
|
protected var name: String = "zhangsan"
|
||||||
|
var sex: String = "male" // 默认就是public
|
||||||
|
// 权限修饰符后面,可以增加权限开放的范围(java不存在这种方式)
|
||||||
|
private[chapter3] var age: Int = 18
|
||||||
|
|
||||||
|
def printInfo(): Unit = {
|
||||||
|
println(s"idCard = ${idCard}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Demo2_accessible_person_sub extends Demo2_accessible_person {
|
||||||
|
override def printInfo(): Unit = {
|
||||||
|
// 如果属性被private修饰,说明这个属性是私有的,被隐藏起来,在类的子类中也是无法访问的
|
||||||
|
//println(s"idCard = ${idCard}")
|
||||||
|
// 如果属性被protected修饰,说明这个属性是被保护的,被隐藏起来,在类的子类中可以访问
|
||||||
|
println(s"name = ${name}")
|
||||||
|
println(s"sex = ${sex}")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package chapter3
|
||||||
|
|
||||||
|
object Demo3Package_1 {
|
||||||
|
def main(args: Array[String]): Unit = {
|
||||||
|
println("package test")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
package chapter3
|
||||||
|
|
||||||
|
import scala.beans.BeanProperty
|
||||||
|
|
||||||
|
object Demo4Class {
|
||||||
|
|
||||||
|
def main(args: Array[String]): Unit = {
|
||||||
|
val zhangsan:Demo4_class_person = new Demo4_class_person("zhagnsan",18)
|
||||||
|
zhangsan.printInfo()
|
||||||
|
|
||||||
|
val lisi:Demo4_class_person_case = Demo4_class_person_case("lisi",18)
|
||||||
|
lisi.printInfo()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class Demo4_class_person(val name:String, var age:Int) {
|
||||||
|
def printInfo(): Unit = {
|
||||||
|
println(s"name=$name,age=$age")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
case class Demo4_class_person_case(val name:String, var age:Int) {
|
||||||
|
def printInfo(): Unit = {
|
||||||
|
println(s"name=$name,age=$age")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
class Demo4_class_person_property(val name:String) {
|
||||||
|
@BeanProperty var age:Int = _
|
||||||
|
def printInfo(): Unit = {
|
||||||
|
println(s"name=$name,age=$age")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package chapter3
|
||||||
|
|
||||||
|
object Demo5Trait {
|
||||||
|
def main(args: Array[String]): Unit = {
|
||||||
|
val doc:Document = new Document("test.txt")
|
||||||
|
println(doc.read())
|
||||||
|
println(doc.read2())
|
||||||
|
doc.write("test111")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
trait Readable {
|
||||||
|
def read(): String
|
||||||
|
def read2():String ={
|
||||||
|
"默认读到内容为空"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
trait Writable {
|
||||||
|
def write(data: String): Unit
|
||||||
|
}
|
||||||
|
|
||||||
|
// 读和写
|
||||||
|
class Document(name: String) extends Readable with Writable {
|
||||||
|
def read(): String = {
|
||||||
|
"读出来的内容是 123"
|
||||||
|
}
|
||||||
|
|
||||||
|
def write(data: String): Unit = {
|
||||||
|
println(s"写入了${data}数据到文件${name}")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
package chapter3
|
||||||
|
|
||||||
|
object Demo6TraitMixin {
|
||||||
|
|
||||||
|
def main(args: Array[String]): Unit = {
|
||||||
|
val myCar = new HybridCar()
|
||||||
|
myCar.describe()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 特质可以包含构造代码(但只能是无参的,3.0后支持带参数),当类混入特质时,这些代码会执行:
|
||||||
|
trait Vehicle {
|
||||||
|
println("初始化小车")
|
||||||
|
|
||||||
|
def describe(): Unit = {
|
||||||
|
println("一辆小汽车") // 基础功能
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
trait PetrolCar extends Vehicle {
|
||||||
|
println("增加燃油功能")
|
||||||
|
|
||||||
|
override def describe(): Unit = {
|
||||||
|
println("可以使用燃油驱动") // 燃油车功能
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
trait ElectricCar extends Vehicle {
|
||||||
|
println("增加电力驱动功能")
|
||||||
|
|
||||||
|
override def describe(): Unit = {
|
||||||
|
println("可以使用电力驱动") // 电动车功能
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class HybridCar extends PetrolCar with ElectricCar {
|
||||||
|
println("混合动力车诞生了")
|
||||||
|
|
||||||
|
override def describe(): Unit = {
|
||||||
|
// super是谁?一定是PetrolCar。 最右优先原则(线性原则)
|
||||||
|
println(s"====super:")
|
||||||
|
super.describe()
|
||||||
|
// 如果向指定PetrolCar呢?
|
||||||
|
super[PetrolCar].describe()
|
||||||
|
//或者
|
||||||
|
//class HybridCar extends ElectricCar with PetrolCar {
|
||||||
|
println(s"====super end")
|
||||||
|
println("我是一辆混合动力车,是在燃油车基础上增加了电力驱动的结果") // 混合动力车
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
小汽车
|
||||||
|
/ \
|
||||||
|
/ \
|
||||||
|
燃油 电
|
||||||
|
\ /
|
||||||
|
\ /
|
||||||
|
混动
|
||||||
|
叠加关系:
|
||||||
|
混动 --> 电动 --> 燃油 --> 车
|
||||||
|
打印顺序:(初始化顺序)
|
||||||
|
车 --> 燃油 --> 电动 --> 混动
|
||||||
|
*/
|
||||||
Reference in New Issue
Block a user