多态基础

类的 多态性

多态的概念:

多态性是子类对象可以直接赋值给父类使用。还有通过子类重写继承实现父类中方法,在子类中

实现同一方法的多种操作(效果)。

多态的必要条件: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();
 */        }  
}

多态中向上转型的实验结果:(有疑惑可以将代码复制练习不同的对象调用)

猜你喜欢

转载自blog.csdn.net/weixin_41387375/article/details/80558270