1、方法覆盖(override)
即方法重写,对父类的方法进行重写,要求子类和父类的方法名和入参个数和类型必须一致。
public class Parent{
public void test(){
System.out.println("这是父类方法")
}
}
public class Children extends Parent{
public void test(){
System.out.println("这是子类方法")
}
}
2、方法重载(overload)
一个类中可以存在多个重名的方法,但是要求方法的入参个数和类型都要不同。
public void test(String str);
public void test(int i);
有了方法覆盖和方法重载的概念之后,接下来就需要详细说明一下多态。
3、多态(动态绑定)
简单说来就是父类引用指向子类对象,调用方法时会调用子类的实现,而不是父类的实现,这叫多态。
多态与继承体系有关,与方法覆盖有关,与方法重载无关。
3.1、接下来我们通过实例来验证一下多态
class Animal {
private String name;
Animal(String name) {
this.name = name;
}
public void enjoy() {
System.out.println("动物的叫声……");
}
}
class Cat extends Animal {
private String eyesColor;
Cat(String n, String c) {
super(n);
eyesColor = c;
}
public void enjoy() {
System.out.println("我养的猫高兴地叫了一声……");
}
}
class Dog extends Animal {
private String furColor;
Dog(String n, String c) {
super(n);
furColor = c;
}
public void enjoy() {
System.out.println("我养的狗高兴地叫了一声……");
}
}
class Bird extends Animal {
Bird() {
super("bird");
}
public void enjoy() {
System.out.println("我养的鸟高兴地叫了一声……");
}
}
/*定义一个类Lady(女士)*/
class Lady {
private String name;
private Animal pet;
Lady(String name, Animal pet) {
this.name = name;
this.pet = pet;// 调用是父类Animal,执行时自动根据子类引用子类接口
}
public void myPetEnjoy() {
pet.enjoy();// 这里就不单纯是调用Animal的enjoy,除非这个类没有改写,否则都会调用各个子类的enjoy方法
}
}
public class TestPolymoph {
public static void main(String args[]) {
Cat c = new Cat("Catname", "blue");
Dog d = new Dog("Dogname", "black");
Bird b = new Bird();
// 执行期间判断所引用对象的实际类型, 根据其实际的类型调用其相应的方法.
Lady l1 = new Lady("l1", c);//猫
Lady l2 = new Lady("l2", d);//狗
Lady l3 = new Lady("l3", b);//鸟
l1.myPetEnjoy();
l2.myPetEnjoy();
l3.myPetEnjoy();
// 下面自己添加的,多态的好处,可以体会一下,扩展性变得更好。
list.add(c);
list.add(d);
list.add(b);
}
}
运行结果:
我养的猫高兴地叫了一声……
我养的狗高兴地叫了一声……
我养的鸟高兴地叫了一声……
3.2、多态的使用场景
多态的存在有三个必要的条件:
(1)要有继承(两个类之间存在继承关系,子类继承父类)
(2)要有重写(在子类里面重写从父类继承下来的方法)
(3)父类引用指向子类对象
3.3、多态的好处和弊端
弊端:
不能使用子类的特有功能。
我就想使用子类的特有功能?行不行?
行。怎么用呢?
A:创建子类对象调用方法即可。(可以,但是很多时候不合理。而且,太占内存了)
B:把父类的引用强制转换为子类的引用。(向下转型)
好处:
A:提高了代码的维护性(继承保证)
B:提高了代码的扩展性(由多态保证)