Java
- Java多态属性是静态绑定的(编译器绑定),方法是动态绑定的(运行期绑定)。运行时,属性输出的是父类的值,方法运行的是子类的方法。即编译看左边,运行看右边。
- Java多态不能访问子类特有的属性和方法。
Scala
- Scala多态属性和方法都是动态绑定的。运行时,属性和方法都是子类的。
- Java多态同样不能访问子类特有的属性和方法。
Java代码
public class Java02_Dynamic {
public static void main(String[] args) {
Person02 t = new Teacher02();
System.out.println(t.name);
t.hello();
}
}
class Person02 {
String name = "person";
int age = 18;
public void hello() {
System.out.println("Person hello");
}
}
class Teacher02 extends Person02 {
String name = "student";
String addr = "China";
@Override
public void hello() {
System.out.println("Teacher hello");
}
public void sleep() {
System.out.println("techer sleep");
}
}
Scala代码
object Scala02_Dynamic {
def main(args: Array[String]): Unit = {
val t: Person02 = new Teacher02
println(t.name)
println(t.age)
t.hello()
}
}
class Person02 {
val name: String = "person"
var age:Int = 18
def hello(): Unit = {
println("hello person")
}
}
class Teacher02 extends Person02 {
override val name: String = "teacher"
var addr = "China"
override def hello(): Unit = {
println("hello teacher")
}
def sleep(): Unit = {
println("teacher sleep")
}
}