面向对象有三大特点:封装,继承,多态。前两者比较简单,大家也没什么疑惑。现在就解释下多态。看了很多人写的关于多态的表述,感觉总是差那么一点,说的不痛快,我把自己对于多态的看法写出来。
1.※什么是多态
多态是同一个行为具有多个不同表现形式或形态的能力。
2.※多态的前提条件有哪些
要有继承/实现关系
要有方法重写
要有父类引用指向子类对象
3.※ 多态的成员特点是什么
Animal a=new Dog();//Dog类继承Animal,有方法的重写。
当代码变成这个样子的时候,(也就是说当编译类型和运行类型不同,如下)多态就产生了。对象a具有两种类型:
编译类型:声明对象变量的类型,Animal,表示把对象看成什么类型。
运行类型:对象的真实类型,Dog。
所谓多态,对象具有多种形态,对象可以存在不同的形式。
Animal a=new Dog()://a此时表示Dog类型的形态
Animal b=new Cat()://a此时表示Cat类型的形态
多态的特点:把子类对象赋值给父类,在运行时期会表现具体的子类特征。
4.※ 多态的优点:
1.消除类型之间的耦合关系
2.可替换性
3.可扩充性
4.接口性
5.灵活性
6.简化性
5..※多态简单案例
package day0601;
public class DemoTest {
/**
* @param args
*/
public static void main(String[] args) {
People p = new Student();// 向上转型,自动转换。这种虽然也是多态,但是实际应用中作用不大,参考本人另一篇多态的应//用实例
p.eat();
Student s = (Student) p;// 向下转型,强制转换
s.study();// 调用特有的方法,这就是多态的一个好处,可以在子类中添加自己独有的方法
}
}
package day0601;
class People {
public void eat() {
System.out.println("吃饭,然后活着");
}
}
package day0601;
class Student extends People {
public void eat() {
System.out.println("吃有营养的食品,健康成长.");
}
public void study() {
System.out.println("好好学习,天天向上!!!");
}
}// 注意:子类中可以不写任何方法,这里也不会报错,但是这很少使用,没意义。不过有一些情况下不写父类继承的方法是有的,调用时直接使用父类的方法
package day0601;
class Teacher {
public void eat() {
System.out.println("控制体重,合理饮食");
}
public void teach() {
System.out.println("教书育人,为人师表");
}
}
输出结果:
吃有营养的食品,健康成长.
好好学习,天天向上!!!