Java:继承中的重写和多态中的重写有什么区别?

问题

Java:继承中的重写和多态中的重写有什么区别?我实在想不明白他们两个的区别在哪里,子类重写了父类方法肯定调用的是子类的方法,父类肯定怎么也调用不了子类的特有方法,所以他们的区别在哪里?

如果是上转型对象,那么它调用的方法只能是父类型中所拥有的方法,如果所调用的方法父类型中没有,编译期都过不了,这叫静态绑定动态运行,如果是继承,那么子类就可以调用本身特有的方法,重写的方法,继承的方法。

区别不大,主要看运行时对象本身的类型。
如果对象是子类,则调用的方法是子类重写的方法,如果是父类,则调用的是父类本身的方法。
例如:

public class Person {
    public void eat() {
        System.out.println("person eat...");
    }
}

public class Man extends Person {
    public void eat() {
        System.out.println("man eat...");
    }
}

public class Test {
    public static void main(String[] args) {
        Person p1 = new Person();
        Person p2 = new Man();
        p1.eat();
        p2.eat();
    }
}

以上执行结果p1执行的是父类Person的方法eat(),p2执行的是子类Man的方法eat()

区别在于main方法中调用时的不同,如果形成多态,则在main方法中调用时成为动态绑定,相对于你每个重写的子类调用时减少了代码的冗余