首先来看概念区分:
重写是子类对父类的允许访问方法过程实现重新的编写,返回值和形参都不变。
重载是在一个类里面方法名字相同,而参数不同。返回值的类型可以是相同的也可以是不同的。
多态是同一个行为具有多个不同的表现形式或形态的能力。
深入解析:
重写:重写也叫做覆盖,是指父类与子类之间的关系。在子类继承父类的过程中,如果子类的方法名如父类的方法名是相同的,那么子类就不能继承父类的方法,此时,叫做子类重写或者覆盖了父类的方法。通过重写,可以使一个方法在不同的子类中表现出不同的行为。
如果子类没有重写父类的方法,那么子类在使用该方法时还是用的父类的方法,并且可以直接调用。
Public class Animal{
void bark(){
*************
}
}
public class Cat extends Animal{
void eat(){
&&&&&&&&&
}
}
pubic class Dog extends Animal{
void eat(){
$$$$$$$$$$4
}
}
main函数
Cat cat=new Cat();
Dog dog=new Dog();
cat.bark();
cat.eat();
dog.eat();
输出结果:**************
&&&&&&&&
$$$$$$$$$$
注意:在进行方法的重写时,子类不能够覆盖父类中声明时final或者是static的方法。
子类的方法声明要和父类的相同,在进行重写的时候。
重载:调用方法时以 对象.方法(有无参数)来调用方法。虽然方法的名字相同,但是调用的方法时不同的。每个被重载的方法必须有一个独一无二的参数列表用来区分是用到了那个方法。在方法重载中,返回值的类型不能够作为是否重载的标志。如:void gets()和int gets()当调用gets()这个方法时,编译器无法识别具体调用的是哪个方法。
多态:多态是基于重写重载之上的,是JAVA的三大特性之一。
比如:
class Shuben{
void function(){
************
}
class Yuwen extends Shuben{
void function(){
&&&&&&&&&&&&&&
}
void color(){
^^^^^^^^^^^^
}
main?
Shuben a=new Yuwen()
a.function();
a.color()://这段如果有,则报错。如果没有继续执行出结果。
}
运行结果:*************
注释:在使用多态来调用方法时,先检查父类中有没有该方法,如果没有,则报错,编译不能继续运行。如果有,则再进行调用对应子类中的方法。如果父类中有该方法则直接调用,子类中没有或者没被重写则直接调用。
成员变量,多态后,还都是父类的数值。
成员方法多态后如果子类有重写该方法则是子类的数值,如果没有或者没有重写该方法,则是父类的数值。静态方法调用后还都是父类的数值。