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" )
}
}