package com.company;
class Base{
public String name="A";
public int age=100;
public void say(){
System.out.println("Base say");
}
public void Info(){
System.out.println("Base Print");
}
}
class sub extends Base{
public String name="B";
public int age=200;
public void Info(){
System.out.println("Sub Print");
}
public void speak(){
System.out.println("Sub speak");
}
}
public class Main {
public static void main(String[] args) {
// write your code here
// 绑定为:如果如果编译时类型和运行时类型不一样的话,就会出现多态
// 这里有编译时类型和运行时类型,这是因为Java有点特别,因为java代码都要编译成*.class文件(此阶段叫编译),然后*.class文件在JVM里面运行(此阶段叫运行)。
// 所以,这两种类型的区别之处就在于:
// 1、编译时类型就是在声明一个变量时,指定该变量的类型。
// 2、而运行时类型,就是真正赋值给这个变量的值的类型。
Base test = new sub();
test.Info();
// Sub Print 方法成员 运行时绑定
((sub) test).speak();
// Sub speak
System.out.println(((sub) test).age);
// 200
System.out.println(test.age);
// 100 成员变量静态绑定
}
}