TA的每日心情 | 开心 2021-12-13 21:45 |
---|
签到天数: 15 天 [LV.4]偶尔看看III
|
1.抽象类(abstract class)
类的一个或者多个方法没有完整的定义
声明方法时只需要不写方法体,不需要关键字
子类重写父类的抽象方法时不需要加override
父类可以声明抽象字段(没有初始值的字段)
子类重写父类抽象字段时不需要加override
- class Test3 {
- }
- abstract class Person{
- def speak
- val name : String
- var age : Int
- }
- class Student extends Person{
- def speak{
- println("speak!!")
- }
-
- var age = 100
- val name = "ahaha"
- }
- object Test3 extends App{
- var s = new Student;
- s.speak
- print (s.name + ":" + s.age)
- }
复制代码
2.trait 特质 对比下Java8的借口
可以理解为包含具体实现的借口
字段和行为的集合
混入类中,第一个要用extends
通过with关键字,一个类可以扩展多个特质
带有特质的对象
特质从左到右被构造
- trait Logger{
- def log(msg:String)
- }
- trait ConsoleLogger extends Logger{
- def log(msg : String){
- println(msg)
- }
- }
- class loggerImpl extends ConsoleLogger{
- def test{
- log("aaa")
- }
- }
复制代码
- trait ConsoleLogger{
- def log(msg : String){
- println("sava money" + msg)
- }
- }
- trait MessageLogger extends ConsoleLogger{
- override def log(msg : String){
- println("sava money to bank" + msg)
- }
- }
- abstract class Account{
- def save
- }
- class MyAcconunt extends Account with ConsoleLogger{
- def save{
- log("100")
- }
- }
- object Test3 extends App{
- val a = new MyAcconunt with MessageLogger //带有特质的对象
- a.save
- }
- class loggerImpl extends ConsoleLogger{
- def test{
- log("aaa")
- }
- }
复制代码
2.apply方法和单例对象
- class Test4 {
- }
- object Test4 extends App{
- val a = ApplyText() //类名+括号调用的是object中的apply方法
- a.test
- val b = new ApplyTest//对象+括号调用的是类中的apply方法
- println(b())
- }
- class ApplyTest{
- def apply() = "APPLY"
- def test{
- println("test")
- }
- }
- //object 里面的方法相当于静态方法
- object ApplyText{ //本身就是一个单例
- def apply()= new ApplyTest
- def static{
- println("mmm a static method")
- }
- }
复制代码
3.包
可串联 package com.aaa{
//在这个层次不能看的bbb的成员
package.bbb{
}
}
顶部标记 package com.b
package b
包对象 把公有的东西放在同一个包里面
包可见性
package aa.bb.cc.dd
class XXX{
private[dd] def as = {} //只能在dd包以下能使用
}
包在任何地方引入
重命名成员 import java.unil.(HashMap => JavaHashMap)
隐藏包 (hashMap => _)
自动引入 java.lang._
|
|