多态的概念:
多态性是子类对象可以直接赋值给父类使用。还有通过子类重写继承实现父类中方法,在子类中
实现同一方法的多种操作(效果)。
多态的必要条件:1、继承;2、重写;3、父类引用指向子类对象。
在下列代码中详细解释:
下列代码是在测试类中普通的调用:当调用某个类时需要创建此个类的对象。相对代码复杂。
/*
Human human = new Human();human.work(); //使用一般操作将类中的方法 通过声明对象调用
Man man = new Man();
man.work();
Woman woman = new Woman();
woman.work();
*/
多态的效果减少了创建类,通过父类型变量指向子类型对象,表现出子类的效果。
为了实现多态效果,通过下面在测试类 Human human = new Man();Human类声明human对象,在实现过程中将子类
Man类中赋值给Human父类。实现多态的过程,首先要明白java中编译和运行两个过程。编译过程由声明类型决定,运行
过程由赋值类型决定。当执行程序结束后,Human类中定义的human可以实现子类中的方法。因为子类Man继承了Human类
,并且重写了父类的work()方法,当调用human.work();,输出的是子类中 System.out.println("男孩潇洒行走。。。");。
而当 调用human.sleep(); 时,由于子类继承父类后没有重写父类的sleep()方法,此时的human就不在相当于man中的对
象,而是父类本身的对象,调用父类自身的方法,所以输出 System.out.println("人类需要睡觉。。。"); 。这就多态中
向上转型。
向上转型的关键理解:例如:Human human = new Man();当子类 Man继承父类Human上,如果子类
重写了父类的方法,当human对象调用方法时,实现的子类重写父类的方法。当子类中没有父类的方法
时,human对象调用的父类本身方法。
完整的代码效果:
class Human {
public void work(){
System.out.println("人类直立行走。。。");
}
public void sleep(){
System.out.println("人类需要睡觉。。。");
} }
class Man extends Human{
public void work(){
System.out.println("男孩潇洒行走。。。");
} }
class Woman extends Human{
public void work(){
System.out.println("女孩负责貌美如花。。。");
} }
public class Demo {
public static void main(String[] args){
Human human = new Man();
human.work();
human.sleep();
/*
Human human = new Human();
human.work(); //使用一般操作将类中的方法 通过声明对象调用
Man man = new Man();
man.work();
Woman woman = new Woman();
woman.work();
*/ } }
多态中向上转型的实验结果:(有疑惑可以将代码复制练习不同的对象调用)