IT评测·应用市场-qidao123.com

标题: 关于java中的多态和对实例化对象的一些理解 [打印本页]

作者: 何小豆儿在此    时间: 2023-5-3 16:29
标题: 关于java中的多态和对实例化对象的一些理解
java面向对象三大特征即为:继承封装多态。而多态需要三大必要条件。分别是:继承、方法重写、父类引用指向子类对象。我们先一个一个来理解。
1、首先是继承和重写。这个很简单。因为多态就是建立在不同的重写之上的。也就是说多态就是在使用着一个方法的不同重写。而重写又是依赖着继承关系。
2、这个父类引用指向子类对象。
首先先上代码示例。
  1. public class Animal {
  2.     public void Shout(){
  3.         System.out.println("叫叫叫");
  4.     }
  5.     public void Hi(){
  6.         System.out.println("打招呼");
  7.     }
  8. }
  9. class Dog extends Animal{
  10.     public void Shout(){
  11.         System.out.println("汪汪汪");
  12.     }
  13.     public void seeHouse(){
  14.         System.out.println("看家");
  15.     }
  16. }class Cat extends Animal{
  17.     public void Shout(){
  18.         System.out.println("喵喵喵");
  19.     }
  20. }
  21. class goose extends Animal{
  22.     public void Shout(){
  23.         System.out.println("嘎嘎嘎");
  24.     }
  25. }
复制代码
 
 
  1. public class TestPolym {
  2.     public static void main(String[] args) {
  3.         AnimalShout(new Dog());
  4.         AnimalShout(new goose());
  5.     }
  6.     static void AnimalShout(Animal animal){
  7.         animal.Shout();
  8.     }
  9. }
复制代码
在如上代码中,Animal类是作为dog、cat、goose的父类。而TestPolym则是用于实现多态
先解释下父类引用指向子类对象:在TestPolym类中的AnimalShout方法中,接收着Animal类的对象。这就是父类的引用;
指向子类对象则是看这一行: 
AnimalShout(new Dog());
这里其实可以理解为:
Animal animal = new Dog();
其实这一行打出来基本就可以理解个七七八八。这句话就是定义了一个对象 animal 然后将其实例化成 类型为 Animal 的Dog()。因为Dog、Cat这些是Animal的子类,所以类型 Animal >= Dog、Cat......这些子类。所以首先指向子类是成立的。
其次在 Animal animal = new Dog(); 这个构造器真实的类型为Dog,但是! 编译器在看animal这个对象的时候,只会将他识别为Animal类型。而这行代码成立的最重要的原因是:Dog是Animal的一个子类,并且Dog类总是小于等于Animal类。然后我们看一下我们在使用什么方法。这个方法是Shout。是由Animal重写而来。因此在调用由Dog类重写Animal类的方法如此代码中的Shout方法时,此语句成立。 
反之,使用此语句去运行不是由Animal类中的方法重写而来的方法时,此语句会报错。例如用这一行去调用seeHouse时
  1. [/code][img]https://img2023.cnblogs.com/blog/3174609/202305/3174609-20230503155510463-540718600.png[/img]
  2.  编译器会红,并且建议你在Animal中创建这样一个方法,那我们去创建一下。之后就会发现,Animal和Dog两个类中都有Hi方法了,又变成重写了!而且程序也能跑的通了。所以本质上还是Animal类包含(抽象一点的)Dog类。
  3. [code]<br><br><br>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4