多态的实现方式:
重载(overload): 同一个类里面两个或者是多个方法的方法名相同但是参数不 同(参数类型,参数个数或者两者都不同)的情况,和返回值无关
实现的是编译时的多态性(前绑定)
1.可以在一个类中也可以在继承关系的类中;
2.名相同;
3.参数列表不同(个数,顺序,类型) 和方法的返回值类型无关
重写(override): 子类重新定义了父类的方法。方法覆盖必须有相同的方 法名,参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问
实现的是运行时的多态性(后绑定)
重写一般发生在父类和子类之间,要求子类与父类的方法有相同的返回类型,比父类被重写的方法更好访问,优先级更低,不能比父类被重写的方法声明更多的异常
1.不能存在同一个类中,在继承或实现关系的类中;
2. 名相同,参数列表相同,方法返回值相同,
3. 3.子类方法的访问修饰符要大于父类的。
4. 4.子类的检查异常类型要小于父类的检查异常
两者都是Java中多态性一个的一个体现,
方法重写是父类与子类之间多态性的体现,
而方法重载主要是类内部多态性的一个体现
Java 中是否可以覆盖(override)一个 private 或者是 static 的方法?
Java 中 static 方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而 static 方法 是编译时静态绑定的。static 方法跟类的任何实例都不相关,所以概念上不适用。 java 中也不可以覆盖 private 的方法,因为 private 修饰的变量和方法只能在当前类中使用, 如果是其他的类继承当前类是不能访问到 private 变量或方法的,当然也不能覆盖。