多态与内部类

信息管理系统分析--多态的引入

  • 存在问题

    在现有的条件下:当我们需要改变使用的Dao类,则必须将Service类中的Dao类进行改变(创建另一个Dao类的对象),而改变之后
    我们的Servie类中使用的Dao对象都需要改变。这样就使得类和类之间的关联性太差了

  • 是否有一种方式可以使得我们改变了Dao类,而和Dao关联的类中的代码可以不改变呢(减低耦合性)?

多态的前提条件

  • 多态:同一个类中不同的对象,在相同的方法下不同的表现

多态成员的访问特点


理解:成员多态的访问特点:
1.不能访问子类特有的成员和方法
2.当父类方法被重写,则方法重写的方法

多态的好处和弊端

多态中的转型

多态中转型存在的风险和解决方案


目标类型和实际类型必须是同一种类型
满足:
1.在向下转型前必须先通过线上转型实现目标和实际类型统一

  • 解决方案

        Fu f = new Fu ();
        if(f instanceof Zi){//判断实际类型是否和目标类型相同
            Zi z = (Zi)f;
        }else {
            System.out.println("类型不统一,不能转型");
        }

信息管理系统----多态改进

  • 代码存在问题
  • 改进点

通过上面的改进,我们将Service和Dao之间的耦合性解开了(改变dao而不同变service类)。但是又有一个新的问题:就是我们的
factory和dao类又存在新的耦合性(dao类改变,factory类里面的代码就要跟着改变)

匿名内部类

  • 正常的使用一个接口中的方法的步骤
  • 使用匿名内部类可以将4步整合成一步完成
  • 对于匿名内部类的理解

    匿名内部类:是一个实现了接口或者是继承了类的子类的对象
    关于对匿名内部类的理解
  • 1.它不是一个类,而是类或者接口的实现类对象
package com.itheima.test3;

public class Testss {
    public static void main(String[] args) {
        new Inter(

        ) {
            @Override
            public void show() {
                System.out.println("show");
            }
        };

    }
}

interface Inter{
    public abstract void show();
}


**情况说明:当接口中有多个方法需要调用(使用匿名内部类)

  • 书写步骤理解
    1. new Inter();(这是一个Inter类型的匿名对象)

    2. new Inter(

      ) {
      @Override
      public void show() {
      System.out.println("show");
      }
      };(这是一个实现了Inter中抽象方法的匿名对象)

这里理解为该对象重写了抽象方法

  • 总结

匿名内部类在开发中使用场景

package com.itheima.test3;

public class TT {
    public static void main(String[] args) {
    swimming(new Swim() {//直接传递一个匿名内部类进去
        @Override
        public void swim() {
            System.out.println("我们去游泳哦");
        }
    });

    }
    public static void swimming(Swim swim){//需要传递一个接口
        swim.swim();
    }

}

interface Swim{
    void swim();
}

posted @ 2023-06-29 22:51  一往而深,  阅读(7)  评论(0编辑  收藏  举报