scala抽象_trait
メソッドに等号を書かないと戻り値もありますが、空の値です.
抽象クラス
クラスの1つ以上のメソッドには完全な定義がありません
抽象メソッドを宣言するにはabstractキーワードを追加する必要はありません.メソッドボディを書かないだけです.
子クラスが親クラスの抽象メソッドを書き換えるときにoverrideを追加する必要はありません
親は抽象フィールド(初期値のないフィールド)を宣言できます.
サブクラスは、親の抽象フィールドを書き換えるときにoverrideを追加する必要はありません.
結果:
抽出クラスの変数について
結果:
最初は混入時にextendsを使い、後のクラスはwithを直接使うことができます.
結果:
trait抽象
結果:
trait親が抽象的な方法ではない場合、この方法を書き直すにはキーワードoverrideを使用する必要があります.
結果:
ちょくせつ混入
結果:
特質(trait)-比較したJAVA 8のインタフェース
1.フィールドと動作のセット.
2.クラスに混入する.
3.withキーワードにより、1つのクラスが複数の特質を拡張できます.
4.インタフェースとして使用します.
5.具体的なインプリメンテーションを有するインタフェース.
6.特質のある対象.
7.特質は左から右へ構造されている.
本文は“陳生龍”のブログから出て、転載をお断りします!
抽象クラス
クラスの1つ以上のメソッドには完全な定義がありません
抽象メソッドを宣言するにはabstractキーワードを追加する必要はありません.メソッドボディを書かないだけです.
子クラスが親クラスの抽象メソッドを書き換えるときにoverrideを追加する必要はありません
親は抽象フィールド(初期値のないフィールド)を宣言できます.
サブクラスは、親の抽象フィールドを書き換えるときにoverrideを追加する必要はありません.
package cn.chinahadoop.scala
class Basic3 {
}
abstract class Person1 {
def speak;
}
class Student1 extends Person1 {
def speak {
println("speak!!!");
}
}
object Basic3 extends App {
//
val s = new Student1();
s.speak;
}
結果:
speak!!!
抽出クラスの変数について
package cn.chinahadoop.scala
class Basic3 {
}
abstract class Person1 {
def speak;
val name: String
var age: Int
}
class Student1 extends Person1 {
val name = "AAA"
var age = 100
def speak {
println("speak!!!");
}
}
object Basic3 extends App {
//
val s = new Student1();
s.speak;
println(s.name + " : " + s.age)
}
結果:
speak!!!
AAA : 100
最初は混入時にextendsを使い、後のクラスはwithを直接使うことができます.
package cn.chinahadoop.scala
class Basic3 {
}
abstract class Person1 {
def speak;
val name: String
var age: Int
}
class Student1 extends Person1 {
val name = "AAA"
var age = 100
def speak {
println("speak!!!");
}
}
trait Logger {
def log(msg: String) {
println("log" + msg)
}
}
class Test extends Logger {
def test {
log("xxxx")
}
}
object Basic3 extends App {
//
// val s = new Student1();
// s.speak;
// println(s.name + " : " + s.age)
val t = new Test()
t.test
}
結果:
logxxxx
trait抽象
package cn.chinahadoop.scala
class Basic3 {
}
abstract class Person1 {
def speak;
val name: String
var age: Int
}
class Student1 extends Person1 {
val name = "AAA"
var age = 100
def speak {
println("speak!!!");
}
}
//trait Logger {
// def log(msg: String) {
// println("log" + msg)
// }
//}
//class Test extends Logger {
// def test {
// log("xxxx")
// }
//}
//trait
//trait ConsoleLogger {
// def log(msg: String) {
// println("save money: " + msg)
// }
//}
trait Logger {
def log(msg: String)
}
trait ConsoleLogger extends Logger {
def log(msg: String) {
println(msg)
}
}
class Test extends ConsoleLogger {
def test() {
log("PPPT");
}
}
object Basic3 extends App {
//
// val s = new Student1();
// s.speak;
// println(s.name + " : " + s.age)
val t = new Test()
t.test
}
結果:
PPPT
trait親が抽象的な方法ではない場合、この方法を書き直すにはキーワードoverrideを使用する必要があります.
package cn.chinahadoop.scala
class Basic3 {
}
abstract class Person1 {
def speak;
val name: String
var age: Int
}
class Student1 extends Person1 {
val name = "AAA"
var age = 100
def speak {
println("speak!!!");
}
}
//trait Logger {
// def log(msg: String) {
// println("log" + msg)
// }
//}
//class Test extends Logger {
// def test {
// log("xxxx")
// }
//}
//trait
trait ConsoleLogger {
def log(msg: String) {
println("save money: " + msg)
}
}
trait MessageLogger extends ConsoleLogger {
override def log(msg: String) {
println("save money to bank :" + msg)
}
}
abstract class Account {
def save
}
class MyAccount extends Account with ConsoleLogger {
def save {
log("100")
}
}
//trait Logger {
// def log(msg: String)
//}
//trait ConsoleLogger extends Logger {
// def log(msg: String) {
// println(msg)
// }
//
//}
//
//class Test extends ConsoleLogger {
// def test() {
// log("PPPT");
// }
//}
object Basic3 extends App {
//
// val s = new Student1();
// s.speak;
// println(s.name + " : " + s.age)
// val t = new Test()
// t.test
val acc = new MyAccount
acc.save
}
結果:
save money: 100
ちょくせつ混入
package cn.chinahadoop.scala
class Basic3 {
}
abstract class Person1 {
def speak;
val name: String
var age: Int
}
class Student1 extends Person1 {
val name = "AAA"
var age = 100
def speak {
println("speak!!!");
}
}
//trait Logger {
// def log(msg: String) {
// println("log" + msg)
// }
//}
//class Test extends Logger {
// def test {
// log("xxxx")
// }
//}
//trait
trait ConsoleLogger {
def log(msg: String) {
println("save money: " + msg)
}
}
trait MessageLogger extends ConsoleLogger {
override def log(msg: String) {
println("save money to bank :" + msg)
}
}
abstract class Account {
def save
}
class MyAccount extends Account with ConsoleLogger {
def save {
log("100")
}
}
//trait Logger {
// def log(msg: String)
//}
//trait ConsoleLogger extends Logger {
// def log(msg: String) {
// println(msg)
// }
//
//}
//
//class Test extends ConsoleLogger {
// def test() {
// log("PPPT");
// }
//}
object Basic3 extends App {
//
// val s = new Student1();
// s.speak;
// println(s.name + " : " + s.age)
// val t = new Test()
// t.test
// val acc = new MyAccount
// acc.save
val acc =new MyAccount with MessageLogger
acc.save
}
結果:
save money to bank :100
特質(trait)-比較したJAVA 8のインタフェース
1.フィールドと動作のセット.
2.クラスに混入する.
3.withキーワードにより、1つのクラスが複数の特質を拡張できます.
4.インタフェースとして使用します.
5.具体的なインプリメンテーションを有するインタフェース.
6.特質のある対象.
7.特質は左から右へ構造されている.
本文は“陳生龍”のブログから出て、転載をお断りします!