关于多态

458 阅读2分钟

在Java的学习中,多态是一个很重要的概念,它将不同类按照特定的关系联系在了一起,并进一步体现了继承在Java中的地位。

  • 一般形式都是 创建继承了父类的 父类类型 的 子类对象,然后对该对象进行调方法,或者其他操作
```package ManyType;

```//父类
public class lives {
   static  String type;

   public    void LiveHabbit(){
       System.out.println("生命在于运动");
   }
}


```//子类
public class plant extends lives{
    @Override
     public  void LiveHabbit(){
         System.out.println("植物爱喝水");
     }


```public class LifeDemo {
    public static void main(String[] args) {
       lives a= new plant();//plant 继承了 lives 
        a.LiveHabbit();//若正确运行应该是植物爱喝水
        
```}

结果是 植物爱喝水

从大部分情况来讲,上面的应该是多态的标准访问模板

但是最近我发现,如果创建对象时两边的关系是爷孙关系或更复杂,照样可以直接访问,如下例

```package ManyType;

```//父类
public class lives {
   static  String type;

   public    void LiveHabbit(){
       System.out.println("生命在于运动");
   }
}
```//子类
public class plant extends lives{
    @Override
     public  void LiveHabbit(){
         System.out.println("植物爱喝水");
     }
···//孙类
···public class flower extends plant {
    @Override
    public void LiveHabbit() {
        System.out.println("花喜欢绽放");
    }
}

```public class LifeDemo {
    public static void main(String[] args) {
    lives a=new flower();
    a.liveHabbit();//正确运行后应该为 花喜欢绽放
    }
     }  ```   

结果为花喜欢绽放

于是我就对多态进行了更深入的思考

  • 多态的条件要求有 继承关系,方法的重写,创建合适的对象

  • 访问方法时类型看父类,运行看子类

  • 如果是多态的问题,那就应该存在对子类的子类中重写方法的检验,(在上例中为先访问plant 然后检验flower中是否存在重写,存在则跳转)

  • 使得继承的链状结构可以被全部访问 但是实验过后这一猜想被推翻

  • 如果这不是多态的问题,那就是多层继承时 可能会执行 方法复制(我目前还没接触多层继承)

  • 复制完成后无论是多少层的继承关系,最终的类中都会存在父类方法和子类中的重写方法

  • 因为继承中方法访问的特性,先从子类的方法执行起,就有了这一结果

总结

多态中对方法的访问取决于继承的层数,但是如果取中间的类作为对象,则不会对后续的类产生影响

  • 根据这一点或许可以通过继承的链状结构和多态的其他操作整出更加灵活的玩意???【嬉笑】
  • 就先这样吧,别的也想不出来了。

1668156431488.jpg