一,java重写Override:
重写的目的是在子类中来实现类似父类而又不同于父类的方法,不仅包括功能上的实现,也包括常见的重写,比如hashmap和equals方法的重写实现,这个部分在下一篇笔记更新。
重写的要求:
1.返回值和形参都不能改变。
2.返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同)。
3.重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。
4.声明为 final 的方法不能被重写。子类和父类在同一个包中,那么子类可以重写父类除了private和final的方法。子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
5.声明为 static 的方法不能被重写,但是能够被再次声明。
6.构造方法不能被重写。

class A{
   public void show(){
      System.out.println("A");
   }
}
 
class B extends A{
   public void show(){
      System.out.println("B");
   }
}
 
public class Test{
   public static void main(String args[]){
       A a = new A(); // 
       A b = new B(); // 
       a.show()
       b.show()
   }
}

其中的A类的引用b指向了B类也就是A类的子类,这时候,虽然说b是A类的引用但是会执行B类的函数代码show,输出的是B,这其实就是多态。这个例子既是重写也是多态,因为多态其实是一种现象,代表了一种现象,重写是一种技术,而多态其实是基于重写的一种现象罢了。

二,重写与多态:
1.多态的存在条件是:继承,重写,以及父类的引用指向了子类的对象。
2.当以上三种情况成立那么多态就出现了。其实是当父类的引用指向了子类的对象的时候就已经存在多态了,因为这个条件就已经暗含了继承和重写不是么,因为如果没有重写的话,那么这段父类的引用指向子类的对象的代码就没有了存在的意义,因为这时的JVM会去判断在父类中是否存在响应的方法,如果只是在子类中存在的方法,那么程序就会报错,因为这个引用是父类的引用。