package com.example.test;
class Father // Animal是父类,下面是继承它的子类Dog
{
int a = 10;
public static void staticMethod() {
System.out.println("父类中的静态方法");
}
public void eat()
{
System.out.println("eat all");
}
}
package com.example.test;
import com.example.test.Father;
class Son extends Father //多态前提一:包括继承关系(或用接口实现)
{
int a = 20;
public static void staticMethod() {
System.out.println("子类中的静态方法");
}
@Override
public void eat() //多态前提二:必须包括方法重写
{
System.out.println("only eat meat");
}
}
package com.example.test;
public class TestMulti
{
public static void main(String[] args)
{
//创建父亲类的对象进行测试 这并不是多态,多态原则是编译看左边运行看右边
Father d = new Father();
d.eat();//输出结果显示 only eat meat
d.staticMethod();
System.out.println(d.a);
System.out.println("--------------------------------------------------------");
Son son = new Son();
son.eat();
son.staticMethod();
System.out.println(son.a);
System.out.println("--------------------------------------------------------");
//创建多态对象测试
Father a = new Son(); //父类引用(Animal) 指向 子类对象(Dog)
//编译看左边:想要保存成功,必须 使用 左边 也就是父类提供的功能!
a.eat(); //运行看右边:最终执行结果以子类的实现为准,此处输出 only eat meat
a.staticMethod();
System.out.println(a.a);
}
}