精华内容
下载资源
问答
  • 阅读以下说明和C语言代码,回答问题1至问题4,将解答填入对应栏内。【说明】在嵌入式操作系统设备管理的实现上,常使用到C语言的函数指针变量,由统一的管理函数调用不同的设备驱动程序。下面的一段C语言代码是驱动...

    阅读以下说明和C语言代码,回答问题1至问题4,将解答填入对应栏内。【说明】在嵌入式操作系统设备管理的实现上,常使用到C语言的函数指针变量,由统一的管理函数调用不同的设备驱动程序。下面的一段C语言代码是驱动管理程序 manage_device调用4个不同设备驱动程序,但没有用到函数指针变量。【C语言代码】/*变量与类型说明*/include 'stdio.h'include 'stdlib.h'extern int sys_status;extern int Dev_drv1(int arg1, int arg2);extern int Dev_drv2(int arg1, int arg2);extern int Dev_drv3(int arg1, int arg2);extern int Dev_drv4(int arg1, iht arg2);define NOERROR 0type struct {int _fd;} TYP_DEV_TAB;TYP DEV_TAB dev_tab[50]= {101,99, 80, 120,};/*程序代码*/void manage_device(int devid, int arg1, int arg2){ int place ;int ret;for(place=0 ; place<50 ; place++)if dev_tab [place]. fd == devid) break;if(place>=50)printf(' NO DEVICE fd = %d/n ',devid);switch(dev_tab [place]._fd) {case 80:ret = Dev_drv3(int arg1,int arg2);break;case 99:ret = Dev_drv2(int arg1,int arg2);break;case 101:ret = Dev_drv1(int arg1,int arg2);break;case 120:ret = Dev_drv4(int arg1,int arg2);break;}if (ret!=NOERROR)printf(' DEVICE %d error!/n ', devid);}int Dev_drv1(int arg1,int arg2){/*局部变量声明,略*//*驱动程序代码,略*/}int Dev_drv2(int arg1,int arg2){/*局部变量声明,略*//*驱动程序代码,略*/}int Dev_drv3(int arg1,int arg2){/*局部变量声明,略*//*驱动程序代码,略*/}int Dev_drv4(int arg1,int arg2){/*局部变量声明,略*//*驱动程序代码,略*/请用C语言的函数指针变量,对manage_device函数进行改造,完成下面C语言代码中的(1)、(2)、(3)和(4)处的变量说明或语句,将解答填入对应栏内。【C语言代码】/*变量与类型说明*/include 'stdio.h'include 'stdlib.h'extern int sys_status;extern int Dev_drv1(int arg1, int arg2);extern int Dev_drv2(int arg1, iht arg2);extern int Dev_drv3(int arg1, int arg2);extern int Dev_drv4(int arg1, int arg2);define NOERROR 0typedef struct {int _fd;(1) 函数指针变量说明;/* 变量名用process */} TYP_DEV_TAB;TYP_DEV_TAB dev_tab[50]= {{101, Dev_drv1},{99, Dev_drv2},{80, Dev_drv3},{120, Dev_dry4},};/* 程序 */void manage_device(int devid, int arg1, int arg2){ iht place ;int ret;(2) 函数指针变量说明;/*局部变量,变量名用ProcAction */for(place=0 ; place<50 ; place++) {if(dev_tab [place]._fd == devid) {(3) 语句1;/* 变量名胜ProcAction, 得到具体函数的入口地址 */break;}}if(place>=50)printf('NO DEVICE fd = %d/n',devid);(4) 语句2;if(ret!=NOERROR)printf('DEVICE %d error!', devid);}

    题型:

    展开全文
  • 第六章学习总结

    2018-12-11 22:03:42
    1.为了克服Java单继承缺点,Java使用了接口,一个类可以实现多个接口。使用关键字interface来定义一个接口。接口的定义和类的定义很相似,分为接口的声明和接口体。 接口声明: –接口通过使用关键字interface来...

    1.为了克服Java单继承的缺点,Java使用了接口,一个类可以实现多个接口。使用关键字interface来定义一个接口。接口的定义和类的定义很相似,分为接口的声明和接口体。

    接口声明:

    –接口通过使用关键字interface来声明

    –格式:interface 接口的名字

    接口体:

    接口体中包含常量定义和方法定义两部分。接口体中只进行方法的声明,不许提供方法的实现,所以,方法的定义没有方法体,且用分号“;”结尾。

     2.接口的变量和方法的构成规则:

    1)接口中的变量自动都是public、static,final,

    2)接口中的方法默认为public abstract;接口也产生class文件。

    3)接口中的方法不能被static和final修饰,因为要重写所有接口中的方法。

    4)接口中没有构造函数,方法可以抛出异常。

    3.实现接口

    1)一个类通过使用关键字implements声明自己实现一个或多个接口。

      如:class A implements Printable,Addable

    2)如果一个类实现了某个接口,那么这个类必须重写该接口的所有方法。

    3)接口可以通过继承产生新的接口。

    4)Java提供的接口都在相应的包中,通过import语句不仅可以引入包中的类,也可以引入包中的接口,

      例如:import java.io.*;

    4.接口回调:可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类重写的接口方法。实际上,当接口变量调用被类重写的接口方法时,就是通知相应的对象调用这个方法。 

    5.理解接口:

    1)接口可以抽象出重要的行为标准,该行为标准用抽象方法来表示。

    2)可以把实现接口的类的对象的引用赋值给接口变量,该接口变量可以调用被该类实现的接口方法,即体现该类根据接口里的行为标准给出的具体行为。

    注:接口的思想在于它可以要求某些类有相同名称的方法,但方法的具体内容(方法体的内容)可以不同,即要求这些类实现接口,以保证这些类一定有接口中所声明的方法(即所谓的方法绑定)。接口在要求一些类有相同名称的方法的同时,并不强迫这些类具有相同的父类。

    6.接口与多态:

    可以通过在接口中声明若干个abstract方法,表明这些方法的重要性,方法体的内容细节由实现接口的类去完成。使用接口进行程序设计的核心思想是使用接口回调,即接口变量存放实现该接口的类的对象的引用,从而接口变量就可以回调类实现的接口方法。

    7.接口参数:

    如果一个方法的参数是接口类型,我们就可以将任何实现该接口的类的实例的引用传递给该接口参数,那么接口参数就可以回调类实现的接口方法。

    8.接口和abstract类的比较如下:

    1)abstract类和接口都可以有abstract方法。

    2)接口中只可以有常量,不能有变量;而abstract类中即可以有常量也可以有变量。

    3)abstract类中也可以有非abstract方法,接口不可以。

    展开全文
  • 浅析Java的单继承与实现多个接口

    千次阅读 2013-10-29 00:56:24
    Java继承  Java继承是使用已存在的类的定义作为基础...JAVA不支持多重继承单继承使JAVA的继承关系很简单,一个类只能有一个父类,易于管理程序,同时一个类可以实现多个接口,从而克服单继承缺点。 在

    Java继承 

    Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。

    JAVA不支持多重继承,单继承使JAVA的继承关系很简单,一个类只能有一个父类,易于管理程序,同时一个类可以实现多个接口,从而克服单继承的缺点。


    面向对象程序设计中运用继承原则,就是在每个由一般类和特殊类形成的一般——特殊结构中,把一般类的对象实例和所有特殊类的对象实例都共同具有的属性和操作一次性地在一般类中进行显式的定义,在特殊类中不再重复地定义一般类中已经定义的东西,但是在语义上,特殊类却自动地、隐含地拥有它的一般类(以及所有更上层的一般类)中定义的属性和操作。特殊类的对象拥有其一般类的全部或部分属性与方法,称作特殊类对一般类的继承。

    继承所表达的就是一种对象类之间的相交关系,它使得某类对象可以继承另外一类对象的 数据成员和成员方法。若类B继承类A,则属于B的对象便具有类A的全部或部分性质(数据属性)和功能(操作),我们称被继承的类A为 基类、父类或 超类,而称继承类B为A的 派生类或子类。

    继承避免了对一般类和特殊类之间共同特征进行的重复描述。同时,通过继承可以清晰地表达每一项共同特征所适应的概念范围——在一般类中定义的属性和操作适应于这个类本身以及它以下的每一层特殊类的全部对象。运用继承原则使得 系统模型比较简练也比较清晰。

    Java继承的特征

    (1)继承关系是传递的。若类C继承类B,类B继承类A,则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。
    (2)继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。
    (3)继承提供了 软件复用功能。若类B继承类A,那么建立类B时只需要再描述与 基类(类A)不同的少量特征( 数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。
    (4)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。
    (5)提供 多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是 多重继承。Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现 多重继承

    java接口

    Java中的接口是一系列 方法的声明,是一些 方法特征的集合,一个接口只有方法的特征 没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。 接口的两种含义:一,Java接口, Java语言中存在的结构,有特定的语法和结构;二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做“Java接口”,后者叫做“接口”。

    Java语言规范中,一个方法的特征仅包括方法的名字,参数的数目和种类,而不包括方法的返回类型,参数的名字以及所抛出来的异常。在Java 编译器检查方法的 重载时,会根据这些条件判断两个方法是否是重载方法。但在Java 编译器检查方法的置换时,则会进一步检查两个方法(分处超类型和子类型)的返还类型和抛出的 异常是否相同。

    接口实现和类继承的规则不同,为了数据的安全,继承时一个类只有一个直接父类,也就是单继承,但是一个类可以实现多个接口,接口弥补了类的不能多继承缺点,继承和接口的双重设计既保持了类的数据安全也变相实现了多继承

    Java接口本身没有任何实现,因为Java接口不涉及表象,而只描述public行为,所以Java接口比Java 抽象类更抽象化。但是接口不是类,不能使用new 运算符实例化一个接口。如 x=new comparable(......);//这个是错误来的。但是可以声明接口变量Comparable x; //这是允许的。

    Java接口的方法只能是抽象的和公开的,Java接口不能有 构造器,Java接口可以有public, 静态的和final属性。

    Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯一的优点吧,但这个优点非常有用。如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法,而Java接口做不到这一点,如果向一个Java接口里加入一个新方法,所有实现这个接口的类就无法成功通过编译了,因为你必须让每一个类都再实现这个方法才行,这显然是Java接口的缺点。
    一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的等级结构中,而由于 Java语言的单继承性,所以抽象类作为类型定义工具的效能大打折扣。在这一点上,Java接口的优势就出来了,任何一个实现了一个Java接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个Java接口,从而这个类就有了多种类型。

    在语法上, 抽象类接口有着以下不同:
    1.abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。 继承抽象类使用的是 extends关键字, 实现接口使用的是 implements关键字,继承写在前面,实现接口写在后面。如果实现多个接口,中间用逗号分隔。

    2.在abstract class中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。
    3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。
    4.实现接口的类必须实现其中的所有方法,继承自抽象类的子类实现所有的抽象方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
    5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
    6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。
    7.接口中的方法默认都是 public,abstract 类型的。



    面向对象编程语言中的 多重继承指的是一个类可以同时继承多个父类的行为和特征功能。 单一继承是指:一个子类只继承一个父类。
    多重继承指代可以导致某些令人混淆的情况,所以关于它的好处与风险之间孰轻孰重常常受人争论。 Java使用了一个折衷的办法:Java允许一个类别继承自多于一个父接口(可以指定某一个类别,它继承了所有父类的类型,并必须拥有所有父类别接口的外部可见 方法的具体实现,并允许 编译器强制以上要求),但只可以从一个父类别继承实现( 方法数据)。

    Java允许对象从多个接口继承,但仅允许一个实现继承。



    展开全文
  • java第六章学习总结

    2020-06-15 13:51:32
    1.为了克服Java单继承缺点,Java使用了接口,一个类可以实现多个接口。使用关键字interface来定义一个接口。 接口声明: –接口通过使用关键字interface来声明 –格式:interface 接口的名字 接口体: 接口体中...

    java第六章学习总结

    1.为了克服Java单继承的缺点,Java使用了接口,一个类可以实现多个接口。使用关键字interface来定义一个接口。
    接口声明:
    –接口通过使用关键字interface来声明
    –格式:interface 接口的名字
    接口体:
    接口体中包含常量定义和方法定义两部分。接口体中只进行方法的声明,不许提供方法的实现,所以,方法的定义没有方法体,且用分号“;”结尾。
    2.接口的变量和方法的构成规则:
    1)接口中的变量自动都是public、static,final,
    2)接口中的方法默认为public abstract;接口也产生class文件。
    3)接口中的方法不能被static和final修饰,因为要重写所有接口中的方法。
    4)接口中没有构造函数,方法可以抛出异常。
    3.实现接口
    1)一个类通过使用关键字implements声明自己实现一个或多个接口。
    2)如果一个类实现了某个接口,那么这个类必须重写该接口的所有方法。
    3)接口可以通过继承产生新的接口。
    4)Java提供的接口都在相应的包中,通过import语句不仅可以引入包中的类,也可以引入包中的接口,
    4.接口回调:可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类重写的接口方法。实际上,当接口变量调用被类重写的接口方法时,就是通知相应的对象调用这个方法。
    5.理解接口:
    1)接口可以抽象出重要的行为标准,该行为标准用抽象方法来表示。
    2)可以把实现接口的类的对象的引用赋值给接口变量,该接口变量可以调用被该类实现的接口方法,即体现该类根据接口里的行为标准给出的具体行为。
    6.接口与多态:
    可以通过在接口中声明若干个abstract方法,表明这些方法的重要性,方法体的内容细节由实现接口的类去完成。使用接口进行程序设计的核心思想是使用接口回调,即接口变量存放实现该接口的类的对象的引用,从而接口变量就可以回调类实现的接口方法。
    7.接口参数:
    如果一个方法的参数是接口类型,我们就可以将任何实现该接口的类的实例的引用传递给该接口参数,那么接口参数就可以回调类实现的接口方法。
    8.接口和abstract类的比较如下:
    1)abstract类和接口都可以有abstract方法。
    2)接口中只可以有常量,不能有变量;而abstract类中即可以有常量也可以有变量。
    3)abstract类中也可以有非abstract方法,接口不可以。

    展开全文
  • Java继承、多态面试题

    万次阅读 2016-04-19 22:14:14
    public class A { public int a = 0; public void fun(){ System.out.println("-----A-----"); } }public class B extends A{ public int a = 1; public void fun(){ System
  • java 接口可以多继承

    2017-03-13 13:07:36
    java中类都是单继承的,但是接口可以多继承 接口是常量值和方法定义的集合。接口是一种特殊的抽象类。 Java类是单继承的。classB Extends classA java接口可以多继承。Interface3 Extends Interface0, ...
  • java是单继承

    千次阅读 2016-04-05 15:00:47
    继承分为单继承和多重继承单继承是指一个子类最多只能有一个父类。 多继承是一个子类可以有二个以上的父类。 由于多继承会带来二义性,Java语言中的类只支持单继承,而接口支持多继承。 Java中多继承的功能是...
  • 为了克服Java单继承缺点,使用接口,一个类可以实现多个接口 1.接口声明 2.接口体 包含常量的声明和抽象方法 常量的访问权限public, 是static常量(可省略public final static修饰符) 抽象方法的访问权限...
  • Sun公司的Java泛型编程文档,英文原版和网络翻译版,想对泛型有更清楚的认识的朋友可以看看,必定会有所帮助
  • java面试题测试(二)

    千次阅读 2019-09-09 15:40:15
    为了克服单继承缺点,Java使用了接口,一个类可以实现多个接口,从而在另一个更合理的角度来实现纯粹的多继承性。因此,通常可以采用实现多个接口的方式间接达到多重继承的目的。 2)、Java中类不能实现多继承...
  • Java特性——继承

    2017-02-23 13:44:04
    Java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。 Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新...
  • Java继承机制

    2020-04-22 20:06:02
    Java继承机制 继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。 Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以...
  • Java继承(Java inheritance)Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,...
  • JAVA的继承

    2021-03-05 20:10:33
    Java继承是使用已存在的类的...因为已经继承了)同时JAVA不支持多重继承单继承使JAVA的继承关系很简单,一个类只能有一个父类,易于管理程序,同时一个类可以实现多个接口,从而克服单继承缺点。此外,继承还能提...
  • 工厂模式,优缺点以及存在的意义1.简单工厂模式(静态工厂模式)1.工厂方法模式 工厂模式的本质 实例化对象不使用new,用工厂方法代替 将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现解耦 - ...
  • 装饰者模式的优缺点

    2020-11-09 19:02:13
    1、装饰者是继承的有力补充,比继承灵活,不改变原有对象的情况下动态地给一个对象扩展功能,即插即用。 2、通过使用不同装饰类以及这些装饰类的排列组合,可以实现不同效果。 3、装饰者完全遵守开闭原则。 缺点...
  • Java子类与继承

    千次阅读 2019-05-16 19:55:08
    一、子类的继承性 1、利用继承,可以先编写一个共有属性的一般类,根据一般类再编写具有特殊属性的新类,新类继承一般类的行为和状态,并根据需要增加它自己的新的状态和行为。 由继承而得到的类称为子类,被继承...
  • C++继承和派生

    2017-04-21 20:31:53
     继承改变了过去传统的非面向对象程序设计中对不再适合要求的用户自定义数据类型进行改写甚至重写的方法,克服了传统程序设计方法对编写出来的程序无法重复使用而造成资源浪费的缺点。通过C++语
  • Java继承超详细

    万次阅读 多人点赞 2021-03-02 14:58:30
    继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 继承的作用:通过继承可以快速创建新的类,实现代码的重用,提高程序的可...
  • 继承关系很简单,一个类只能有一个父类,易于管理程序,同时一个类可以实现多个接口,从而克服单继承缺点。 分类   继承分为单继承和多重继承单继承是指一个子类最多只能有一个父类。多继承是一个子类可以有...
  • 多态与继承的概念及区别

    千次阅读 2017-07-19 21:45:32
    JAVA不支持多继承单继承使JAVA的继承关系很简单,一个类只能有一个父类,易于管理程序,同时一个类可以实现多个接口,从而克服单继承缺点。 (1)继承关系是传递的。若类C继承类B,类B继承类A(多层继承...
  • java为什么不支持多继承

    千次阅读 2015-06-23 15:56:16
    继承指一个子类能同时继承于多个父类,从而同时拥有多个父类的特征,但缺点是显著的。  1.若子类继承的父类中拥有相同的成员变量,子类在引用该变量时将无法判别使用哪个父类的成员变量。如:  public ...
  • 克服了传统程序设计方法对编写出来的程序无法重复使用而造成资源的浪费的缺点面向对象程序设计的继承机制给我们提供了无限重复利用程序资源的一种途径通过C++语言中的继承机制,可以扩充和完善旧的程序设计以适应新的...
  • (08)System Verilog 类继承 ...它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。 FPGA设计不是简单的芯片研究,主要
  • 组合的优点,继承缺点

    千次阅读 2010-05-20 23:00:00
    为了尽可能地克服继承的这一缺陷,应该遵循以下原则: ·精心设计专门用于被继承的类,继承树的抽象层应该比较稳定。·对于父类中不允许覆盖的方法,采用final修饰符来禁止其被子类覆盖。·对于不是专门用于被继承的...
  • 继承QThread 重写run 其它线程里使用start函数来启动此线程。 缺点 线程中的对象必须在run函数中创建。 线程无法接收信号,只能发送信号。 对象moveToThread 实现方式: 新建类假设为Worker,在类的槽...
  • 30 分钟学会 JS 继承

    2017-03-14 14:33:58
    这是一篇关于 JS 继承的文章,基本上常用的继承方式在文章都已列出,如果读者有新的方式,欢迎在评论区留言。 众所周知,在 ES 6 之前没有类的概念,所以不能像 Java 中一个 extends 关键字就搞定了继承...
  • 对于客户端来说,去除了与具体产品的依赖),而且克服了简单工厂的缺点(违背了开放封闭原则)。 缺点:  每增加一个产品,就需要增加一个产品工厂的类,增加了额外的开发。(用反射可以解决)。 应用:  1、...
  • Java继承

    2018-02-24 23:19:41
    Java继承是使用已存在的类的...因为已经继承了)同时JAVA不支持多重继承单继承使JAVA的继承关系很简单,一个类只能有一个父类,易于管理程序,同时一个类可以实现多个接口,从而克服单继承缺点。 此外,继承还...
  • Java的继承继承中类的加载顺序

    千次阅读 2013-04-12 11:04:31
    Java继承的概念  Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的... JAVA不支持多重继承单继承使JAVA的继承关系很简单,一个类只能有一个父类,易于管理程序,同时一个类可以实现多个接口,从而克

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,876
精华内容 5,150
关键字:

为了克服单继承的缺点