首页 > 其他分享 >多态与内部类

多态与内部类

时间:2023-06-29 23:01:19浏览次数:40  
标签:内部 void Dao 多态 匿名 Inter public

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

  • 存在问题

    在现有的条件下:当我们需要改变使用的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();
}

标签:内部,void,Dao,多态,匿名,Inter,public
From: https://www.cnblogs.com/swtaa/p/17515071.html

相关文章

  • React - 判断当前点击是组件的外部或内部
    1.先获取当前要监听的那个组件的refimportReact,{useRef}from'react';//类组件获取this.Ref=React.createRef();//函数组件获取constRef=useRef();2.通过addEventListener来全局监听document.addEventListener("mousedown",(e)=>{if(Ref.contains(e.ta......
  • JAVA常用类---静态内部类
    publicclassOuter{privateStringname="李四";privateStringsex="男";//静态类和外部类权限一样/*外部调用Outer.Interinter=newOuter.Inter();Outer.Inter仅表示包含关系,如果是成员类应为Outer.Interinter=newOuter().Inter();还需要导......
  • 读取Devexpress内部的图标
    引用DevExpress.Images.vXX.1.dll文件,代码获取图标方法:ImageCollectionimageCollection=newImageCollection();imageCollection.Images.Add(DevExpress.Images.ImageResourceCache.Default.GetImage("images/actions/add_16x16.png"));DevExpress.Images.ImageResourc......
  • 单继承、多继承下的属性查找、super关键字、多态与多态性、组合
    单继承下的属性查找单继承:一个类只能继承一个类。classC():passclassB(C):passclassA(B):#单继承pass单继承下的属性查找顺序:先从对象本身的名称空间中查找------>产生这个对象的类中去查找 ------>继承的父类中去查找#查找属性classFoo():......
  • vs版本与version(内部版本号)的关系表table
    为什么要查vs版本与内部verion的对应关系?因为c++的项目需要对应的vs版本,给大型的c++项目升级vs版本是个耗时的工程,所以一般情况下开发者都会安装多个版本的vs。对于sln文件,以文本形式打开,可以看到一个version,这个是vs内部版本号,而我们安装电脑上的是以年份命名的版本。vs版本......
  • CSS样式(内联、内部、外部)
    https://blog.csdn.net/xiji333/article/details/111283931文章目录1.内联样式2.内部样式3.外部样式1.内联样式  内联样式,又称行内样式。在标签内部通过stylestylestyle属性来设置元素的样式。<!DOCTYPEhtml><html><head><metacharset="utf-8"><ti......
  • 浅谈安科瑞用于配电室的内部环境监控系统设计与产品选型
    摘要:配电室是配电系统的重要组成部分,影响着电力用户的用电需求,需要保障其安全、可靠运行。针对配电室内部环境进行了深入分析,设计了一种内部环境监控系统。通过该系统可以采集配电室内部的温度、湿度、液位、SF6气体和烟雾,根据采集来的数据及时对风机、除湿机、空调、排水泵等辅助......
  • 小鹏内部独家Android车载系统开发指南开源了
    众所周知,国内的安卓市场内卷极其严重,原生应用开发可谓是寸步难行,想必大家在最近的面试中能看出,要么面试完全没机会,要么薪资对半砍,一天比一天难......但细看整个Android生态却无比繁荣,手机、平板、电视、音视频等等,特别是在智能汽车+电动汽车的浪潮下,诞生出一大批高薪岗位。车载成为......
  • 警告: BASE64Decoder是内部专用 API, 可能会在未来发行版中删
    开发过程中遇到这个问题,虽然不影响项目运行,打包发布,但还是要把警告扼杀在摇篮中。sun.misc包都是sun公司的内部类,并没有在javaapi中公开过,不建议使用,所以使用这些方法是不安全的,将来随时可能会从中去除,所以相应的应该使用替代的对象及方法。针对警告:BASE64Decoder是内部专用A......
  • 笔记本输入python无提示、也无报错(不提示“不是内部或外部命令,也不是可运行的程序”)
    最近在安装Python的时候发生了很奇怪的现象(安装前):从命令行执行python并不会输出python版本信息,似乎也没有其他反应,也无报错(不提示“不是内部或外部命令,也不是可运行的程序”),再次输入命令wherepython显示C:\Users\quxw\AppData\Local\Microsoft\WindowsApps\python.exe,如下......