文档库 最新最全的文档下载
当前位置:文档库 › 类和接口

类和接口

类和接口
类和接口

.Net提供了接口,这个不同于Class或者Struct的类型定义。接口有些情况,看似和抽象类一样,因此有些人认为在.Net可以完全用接口来替换抽象类。其实不然,接口和抽象类各有长处和缺陷,因此往往在应用当中,两者要结合来使用,从而互补长短。

接下来先说说抽象类和接口的区别。

区别一,两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”。这些听起来有些虚,举个例子。例如,狗是对于所有狗类动物的统称,京哈是狗,牧羊犬是狗,那么狗的一般特性,都会在京哈,牧羊犬中找到,那么狗相对于京哈和牧羊犬来说,就属于这类事物的抽象类型;而对于“叫”这个动作来说,狗可以叫,鸟也可以叫。很明显,前者相当于所说的是抽象类,而后者指的就是接口。

区别二,抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。

例如:

public abstract class AbsTest

{

public virtual void Test()

{

Debug.WriteLine( "Test" );

}

public abstract void NewTest();

}

public interface ITest

{

void Test();

void NewTest();

}

区别三,继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和属性实现。

区别四,在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。

知道了两者的区别,再来说说,接口相对于抽象类的优势。

好处一,接口不光可以作用于引用类型,也可以作用于值类型。而抽象类来说,只能作用于引用类型。

好处二,.Net的类型继承只能是单继承的,也就是说一个类型只能继承一个类型,而可以继承多个接口。其实,我对于这一点也比较赞同,多继承会使继承树变的混乱。

好处三,由于接口只是定义属性和方法,而与真正实现的类型没有太大的关系,因此接口可以被多个类型重用。相对于此,抽象类与继承类的关系更紧密些。

好处四,通过接口,可以减少类型暴露的属性和方法,从而便于保护类型对象。当一个实现接口的类型,可能包含其他方法或者属性,但是方法返回的时候,可以返回接口对象,这样调用端,只能通过接口提供的方法或者属性,访问对象的相关元素,这样可以有效保护对象的其他元素。

好处五,减少值类型的拆箱操作。对于Struct定义的值类型数据,当存放集合当中,每当取出来,都需要进行拆箱操作,这时采用Struct+Interface结合的方法,从而降低拆箱操作。

参看如下文章提供的方法。

https://www.wendangku.net/doc/6210493516.html,/Knight94/archive/2006/10/08/1326326.aspx

相对于抽象类来说,接口有这么多好处,但是接口有一个致命的弱点,就是接口所定义的方法和属性只能相对于继承它的类型(除非在继承类中修改接口定义的函数标示),那么对于多层继承关系的时候,光用接口就很难实现。因为如果让每个类型都去继承接口而进行实现的话,首先不说编写代码比较繁琐,有时候执行的结果还是错误,尤其当子类型对象隐式转换成基类对象进行访问的时候。

那么这时候,需要用接口结合虚方法来实现。参看IDisposable在继承类型中的实现方法。

https://www.wendangku.net/doc/6210493516.html,/Knight94/archive/2006/10/10/1329214.aspx

其实在继承中,到底使用接口还是抽象类。接口是固定的,约定俗成的,因此在继承类中必须提供接口相应的方法和属性的实现。而对于抽象类来说,抽象类的定义方法的实现,贯穿整个继承树,因此其中方法的实现或者重写都是不确定的。因此相对而言,抽象类比接口更灵活一些。

总的来说,接口和抽象类是.Net为了更好的实现类型之间继承关系而提供的语言手段,而且两者有些相辅相成的关系。因此我并不强调用什么而不用什么,那么问题的关键在于,如何把这两种手段合理的应用到程序当中,这才是至关重要。

Trackback: https://www.wendangku.net/doc/6210493516.html,/TrackBack.aspx?PostId=1357947

用接口减少装箱(Boxing)和拆箱(Unboxing)操作

为了便于文章的开展,首先介绍装箱(Boxing)和拆箱(Unboxing)这两个名词。.Net的类型分为两种,一种是值类型,另一种是引用类型。这两个类型的本质区别,值类型数据是分配在栈中,而引用类型数据分配在堆上。那么如果要把一个值类型数据放到堆上,就需要装箱操作;反之,把一个放在堆上的值类型数据取出来,则需要进行拆箱操作。

例如,对于如下简单的装箱和拆箱操作语句。

int i = 123;

object obj = i;//Boxing

if( obj is int )

int j = (int) obj;//Unboxing

为了,更好的诠释装箱和拆箱操作,我借用MSDN关于“Boxing”的解释图,具体如下。

明白了这两名词的意思,现在说说为什么要减少装箱和拆箱操作。

原因有两个,主要是关于效率:一个就是对于堆的操作效率比较低;另一个就是对于堆上分配的内存资源,需要GC来回收,从而降低程序效率。

考虑到这两点因素,那么需要在程序中减少装箱和拆箱操作。

如何减少呢,涉及到这两个操作比较多的是,格式化输出操作,例如:String.Format,Console.WriteLine之类的语句。

例如:

Console.WriteLine( "Number list:{0}, {1}, {2}",

1,2,3 );

对于“1,2,3”来说,相当于前面的“123”一样,需要经过装箱和拆箱两个操作。那么如何避免呢,其实只要向WriteLine传递引用类型数据即可,也就是按照如下的方式。

Console.WriteLine( "Number list:{0}, {1}, {2}",

1.ToString(),

2.ToString(),

3.ToString() );

由于“1.ToString()”的结果是String类型,属于引用类型,因此不牵扯装箱和拆箱操作。

其次,牵扯到装箱和拆箱操作比较多的就是在集合中,例如:ArrayList或者HashTable之类。

把值类型数据放到集合中,可能会出现潜在错误。例如:

public struct Person

{

private string _Name;

public string Name

{

get{ return _Name; }

set{ _Name = value; }

}

public Person( string PersonName )

{

_Name = PersonName;

}

public override string ToString()

{

return _Name;

}

}

// Using the person in a collection

ArrayList arrPersons = new ArrayList();

Person p = new Person( "OldName" );

arrPersons.Add( p );

// Try to change the name

p = ( Person ) arrPersons[0] ;

https://www.wendangku.net/doc/6210493516.html, = "NewName";

Debug.WriteLine( ( (Person ) arrPersons[0] ).Name );//It's "OldName"

这个问题其实在前面的文章中已经讲过了。有人可能会说,是否可以按照如下的方式去修改呢。

( (Person ) arrPersons[0] ).Name = "NewName";//Can't be compiled

很不幸,如上操作不能通过编译。为什么呢,对于“( (Person ) arrPersons[0] )”来说,是系统用一个临时变量来接收拆箱后的值类型数据,那么由于值类型是分配在栈上,那么操作是对实体操作,可是系统不允许对一个临时值类型数据进行修改操作。

// Using the person in a collection

ArrayList arrPersons = new ArrayList();

Person p = new Person( "OldName" );

arrPersons.Add( p );

// Try to change the name

p = ( Person ) arrPersons[0] ;

https://www.wendangku.net/doc/6210493516.html, = "NewName";

arrPersons.RemoveAt( 0 );//Remove old data first

arrPersons.Insert( 0, p );//Add new data

Debug.WriteLine( ( (Person ) arrPersons[0] ).Name );//It's "NewName"

其实,这样操作会产生过多装箱和拆箱操作。那么更好的方法,可以通过接口来完成,从而减少装箱和拆箱操作。对于这个例子的接口实现应该如下。

public interface IPersonName

{

string Name{ get;set;}

}

public struct Person:IPersonName

{

private string _Name;

public string Name

{

get{ return _Name; }

set{ _Name = value; }

}

public Person( string PersonName )

{

_Name = PersonName;

}

public override string ToString()

{

return _Name;

}

}

// Using the person in a collection

ArrayList arrPersons = new ArrayList();

Person p = new Person( "OldName" );

arrPersons.Add( p );

// Change the name

( (IPersonName)arrPersons[0] ).Name = "NewName";

Debug.WriteLine( ( (Person ) arrPersons[0] ).Name );//It's "NewName"

很多人就问,为什么值类型不能修改,即

( (Person ) arrPersons[0] ).Name = "NewName";//Can't be compiled

而如上的接口类型就能修改呢,即

( (IPersonName)arrPersons[0] ).Name = "NewName";

这是由于产生的临时变量的类型不同,前者已经在前面进行说明了,后者由于产生的临时变量的类型为IPersonName,属于引用类型,那么相当于临时变量就是原对象的引用,那么对于对于它的修改会直接修改到原对象,因此是可以的。可以说这里的不同本身在于产生临时对象的类型不同,从而造成本质的区别。

通过接口来改写,这样就减少了装箱和拆箱操作,同时也保证了修改的正确性。不过要注意的是,这里接口对于的是引用类型,如果接口访问的或者返回的是值类型,那么用接口虽说能实现了,但是对于装箱和拆箱操作来说,并没有减少。

对于装箱和拆箱操作来说,基本上就讲完了,只要记住频繁装箱和拆箱操作会降低程序效率,因此在编写的时候要尽量避免。

Trackback: https://www.wendangku.net/doc/6210493516.html,/TrackBack.aspx?PostId=1326326

06接口与内部类

1.给出如下层次图和程序片段,下列哪个命题是正确的?【选择一项】 Animal Mammal Dog Cat Raccoon Elephant (implements) (implements) ( Washer ) ( Washer ) 1. Cat sunflower; 2. Washer wawa; 3. Elephant pogo; 4. 5. sunflower = new Cat(); 6. wawa = sunflower; 7. pogo = (Elephant)wawa; A第6行导致程序编译失败。 B第7行导致程序编译失败。 C编译通过但是第7行会抛出异常。 D D.以上结果均不是。 2.下列那些命题是不正确的?【选择两项】 A JAVA程序通过接口实现多重继承。 B JAVA里面所有的异常、接口或者其他类,都从Object类扩展而来。C构造方法可以用private修饰,并且可以抛出异常。 D装箱类一共有六个。 3.下列哪些命题为假?【选择三项】 A静态方法只能被类调用,不能被实例调用。 B所有数据类型都可以用==判断恒等。 C equals()方法成立的地方,==也一定成立。 D包含抽象方法的类一定是抽象类。 4.试图编译、运行下列程序,结果是什么?【选择一项】 //Foo.java interface Foo { int k = 0; } //Test.java public class Test implements Foo {

public static void main(String[] args) { int i; Test test = new Test(); i = test.k; i = Test.k; i = Foo.k; } } A编译失败。 B编译成功。 C运行异常。 D以上结果均不是。 5.下列修饰符不能用于顶层类的是哪个【选择一项】。 A public B private C abstract D final 6.哪些命题为真?【选择两项】 A在Java中,implement用于实现接口。 B非抽象类的子类可以声明为abstract。 C超类的所有成员都将由子类继承。 D final类不可以是抽象的。 E如果类中的所有成员都声明为private,则该类不能声明为public。 7.哪些关于接口的命题为真?【选择两项】 A接口允许多重实现接口。 B接口可以被任意数目的其他接口扩展。 C接口可以扩展任意数目的其他接口。 D接口的成员变量从来不会是static。 E接口的方法总会被声明为static。 8.给出下面的程序: 1. interface Base { 2. boolean m1 (); 3. byte m2(short s); 4. } 下面哪两段代码将编译通过? 【选择两项】 A interface Base2 implements Base {} B abstract class Class2 extends Base {

类与接口的关系理解

(类是对所有事物公共的概念进行抽象的描述。)类描述了一系列在概念上有相同含义的对象,并为这些对象统一定义了编程语言上的属性和方法。对象就是一个类的实例(是某一类的具体化实例),每一个类都是具有某些共同特征的对象的抽象。 public class Car { public int number; //编号 public string color; //颜色 private string brand; //厂家 } 析构函数(前面加一个~符号): class Program { ~Program() //析?构1函?¥数oy { Console.WriteLine("析?构1函?¥数oy自á?动?¥调ì??用??"); //输o?出?一°?个?字á?符¤?串?? } static void Main(string[] args) { Program program = new Program(); //实o|ì例¤y化?¥Program对?象¨?} 接口是一种用来定义程序的协议,它描述可属于任何类或结构的一组相关行为。接口可由方法、属性、事件和索引器或这4种成员类型的任何组合构成,但不能包含字段。 C#中的类只支持单继承,但基于多继承给程序员带来的诸多方便与好处,所以通过接口可以实现多继承的功能。(以I开头命名接口名称) 一个接口实现多个类: 一个派生子类可以实现多个接口(多个接口用,隔开): class Program : IPeople, ITeacher, IStudent//多¨¤接¨?口¨2继¨?承D { string name = ""; string sex = ""; ///

///姓?名? /// public string Name { get { return name; }

接口和抽象类的区别

.Net提供了接口,这个不同于Class或者Struct的类型定义。接口有些情况,看似和抽象类一样,因此有些人认为在.Net可以完全用接口来替换抽象类。其实不然,接口和抽象类各有长处和缺陷,因此往往在应用当中,两者要结合来使用,从而互补长短。 接下来先说说抽象类和接口的区别。 区别一,两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”。这些听起来有些虚,举个例子。例如,狗是对于所有狗类动物的统称,京哈是狗,牧羊犬是狗,那么狗的一般特性,都会在京哈,牧羊犬中找到,那么狗相对于京哈和牧羊犬来说,就属于这类事物的抽象类型;而对于“叫”这个动作来说,狗可以叫,鸟也可以叫。很明显,前者相当于所说的是抽象类,而后者指的就是接口。 区别二,抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。 例如: public abstract class AbsTest { public virtual void Test() { Debug.WriteLine( "Test" ); } public abstract void NewTest(); } public interface ITest {

void Test(); void NewTest(); } 区别三,继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和属性实现。 区别四,在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。 知道了两者的区别,再来说说,接口相对于抽象类的优势。 好处一,接口不光可以作用于引用类型,也可以作用于值类型。而抽象类来说,只能作用于引用类型。 好处二,.Net的类型继承只能是单继承的,也就是说一个类型只能继承一个类型,而可以继承多个接口。其实,我对于这一点也比较赞同,多继承会使继承树变的混乱。 好处三,由于接口只是定义属性和方法,而与真正实现的类型没有太大的关系,因此接口可以被多个类型重用。相对于此,抽象类与继承类的关系更紧密些。 好处四,通过接口,可以减少类型暴露的属性和方法,从而便于保护类型对象。当一个实现接口的类型,可能包含其他方法或者属性,但是方法返回的时候,可以返回接口对象,这样调用端,只能通过接口提供的方法或者属性,访问对象的相关元素,这样可以有效保护对象的其他元素。

接口和抽象类习题-答案

(一)选择题 1.以下哪个接口的定义是正确的? A.interface B{ void print() { } ; } B.abstract interface B { void print() ; } C.abstract interface B extends A1,A2 { abstract void print(){ }; } D.interface B { void print();} 2.定义一个接口时,下列哪个关键字用不到? A.public B.extends C.interface D.class 3.定义一个接口时,要使用如下哪个关键字? A.abstract B.final C.interface D.class 4.在使用interface声明一个接口时,只可以使用哪个修饰符修饰该接口。 A.private B.protected C.private或者protected D.public 5.下列类头定义中,错误的是? A.public x extends y B.public class x extends y C.class x extends y implements y1 D.class x 6.下列类定义中,不正确的是? A.class x B.class x extends y C.class x implements y1,y2 D.public class x extends X1,X2 7.Java中能实现多重继承功能的方式是? A.接口 B.同步 C.抽象类 D.父类 8.下列叙述正确的是? A.Java中允许多重继承 B.Java一个类只能实现一个接口 C.Java中只能单重继承 D.Java中一个类可以继承多个抽象类 (二)简答题

各类光纤接口类型的区别与图示

各类光纤接口类型的区别与图示 光纤的接口比较复杂,在项目的过程中有时候确实很容易弄错,为了方便自己和大家的工作,特整理了以下资料: 光纤接头类型主要可以分为以下几种: FC 圆型带螺纹(配线架上用的最多) ST 卡接式圆型 SC 卡接式方型(光纤收发器用的较多) LC 卡接式方形,比SC略小(光纤交换机用的较多) MT-RJ 方型,一头光纤收发一体 如下图所示: 光纤模块主要分为以下两种,一般都支持热插拔: GBIC(Giga Bitrate Interface Converter)使用的光纤接口多为SC或ST型 SFP小型封装GBIC,使用的光纤为LC型 光纤单模和多模的标识: L:表示单模,波长1310纳米; LH:表示单模长距,波长1310纳米,1550纳米; SM:表示多模,波长850纳米;

SX/LH :表示可以使用单模或多模光纤; 单模光纤的传输距离要比多模光纤远。 下面,是一些接线图,方便大家查看: 另外,如下图所示,在表示尾纤接头的标注中,我们常能见到“FC/PC”,“SC/APC”等,其含义如下:

“/”前面部分表示尾纤的连接器型号: “SC”接头是标准方型接头,采用工程塑料,具有耐高温,不容易氧化优点。传输设备侧光接口一般用SC 接头 “LC”接头与SC接头形状相似,较SC接头小一些。 “FC”接头是金属接头,一般在ODF侧采用,金属接头的可插拔次数比塑料要多。 “/”后面表明光纤接头截面工艺,即研磨方式: “PC” 微球面研磨抛光,在电信运营商的设备中应用得最为广泛,其接头截面是平的,。 “UPC”的衰耗比“PC”要小,一般用于有特殊需求的设备,一些国外厂家ODF架内部跳纤用的就是FC/UPC,主要是为提高ODF设备自身的指标。 “APC”呈8度角并做微球面研磨抛光,可改善电视信号的质量。 版权所有? mcsrainbow,保留所有原创日志的权利。转载请注明出处:https://www.wendangku.net/doc/6210493516.html, 。 这篇文章发表于2010/01/25 15:49,属于Network分类。你可以通过RSS 2.0来跟踪这篇文章。你还可以对它进行评论。

(2)java练习(类和接口)

1. (分值:0.7 分)Java 语言中创建一个对象使用的关键字为 A: class B: interface C: new D: create 2. (分值:0.7 分)设有对象x 具有属性a 则访问该属性的方法为 A: a.x B: a.x() C: x.a D: x.a() 3. (分值:0.7 分)以public 修饰的类如:public class Car{…} 则Car( ) A: 可被其它程序包中的类使用 B: 仅能被本程序包中的类使用 C: 不能被任意其它类使用 D: 不能被其它类继承 4. (分值:0.7 分)Java 语言中,只限子类或者同一包中的类的方法能访问的访问权限是( ) A: public B: private C: protected D: <无修饰> 5. (分值:0.7 分)有Java 语句如下,则说法正确的是()int []a,b=new int[3]; A: 此语句是错误的 B: a.length 的值为3 C: b.length 的值为3 D: a.length 和b.length 的值都为3 6. (分值:0.7 分)设有数组定义int[][] x={{1,2},{3,4,5},{6},{}};,则x.length 的值为( ) A: 3 B: 4 C: 6 D: 7 7. (分值:0.7 分)在Java 语言的java.util 包中,用于语言符号(单词)分析的类是()A: stringTokenizer B: StringTokenizer C: ToKenizer D: tokenizer 8. (分值:0.7 分)接口的所有变量和方法分别默认为是() A: final static 和public abstract B: final static 和public final C: public static 和public abstract D: public static 和public final 9. (分值:0.7 分)下列有关Java 的叙述错误的是() A: 强类型语言 B: 与平台无关

C#抽象类和接口的区别

C#抽象类和接口的区别

c#接口和抽象类的区别大家都容易把这两者搞混,我也一样,在听李建忠老师的设计模式时,他也老把抽象类说成接口,弄的我就更糊涂了,所以找了些网上的资料. 一、抽象类: 抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。 二、接口: 接口是引用类型的,类似于类,和抽象类的相似之处有三点: 1、不能实例化; 2、包含未实现的方法声明; 3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员); 另外,接口有如下特性: 接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。 三、抽象类和接口的区别: 1.类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类.而接口只是一个行为的规范或规定,微软的自定义接口总是后带able字段,证明其是表述一类类“我能做。。。”.抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中. 2.接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法; 3.一个类一次可以实现若干个接口,但是只能扩展一个父类 4.接口可以用于支持回调,而继承并不具备这个特点. 5.抽象类不能被密封。 6.抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的. 7.(接口)与非抽象类类似,抽象类也必须为在该类的基类列表中列出的接口的所有成员提供它自己的实现。但是,允许抽象类将接口方法映射到抽象方法上。 8.抽象类实现了oop中的一个原则,把可变的与不可变的分离。抽象类和接口就是定义为不可变的,而把可变的座位子类去实现。 9.好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染。 10.尽量避免使用继承来实现组建功能,而是使用黑箱复用,即对象组合。因为继承的层次增多,造成最直接的后果就是当你调用这个类群中某一类,就必须把他们全部加载到栈中!

四大类插孔接口详解

四大类插孔接口详解 编辑整理—王兆贵 在平板电视市场高速发展的同时,电视背部接口也引起了消费者的广泛关注。作为数字电视,现在不仅仅是用来观看电视,很多用户都开始用它与数码相机、硬盘、电脑、微软Xbox 360、索尼的PS3和任天堂Wii游戏机等设备进行链接,这时对接口就有一些要求,像HDMI接口、USB接口都成为了高清平板电视的主流接口。到底哪些为目前液晶、等离子电视的必备接口呢?下面笔者就从必备、使用、可选、趋势四大方面对接口进行了简单解析,一起来看看吧。 平板电视四大类接口详解-王兆贵 四大类接口 ● 必备接口: ·HDMI接口:是最新的高清数字音视频接口,收看高清节目,只有在HDMI通道下,才能达到最佳的效果,是高清平板电视必须具有的基本接口。 ·DVI接口:是数字传输的视频接口,可将数字信号不加转换地直接传输到显示器中。(王兆贵1157440560) ·色差分量接口:是目前各种视频输出接口中较好的一种。 ·AV接口:AV接口实现了音频和视频的分离传输,避免了因音/视频混合干扰而导致的图像质量下降。

·RF输入接口:是接收电视信号的射频接口,将视频和音频信号相混合编码输出,会导致信号互相干扰,画质输出质量是所有接口中最差的。 ● 实用接口:(王兆贵1157440560) ·光纤接口:使用这种接口的平板电视不通过功放就可以直接将音频连接到音箱上,是目前最先进的音频输出接口。 ·RS-232接口:是计算机上的通讯接口之一,用于调制解调器、打印机或者鼠标等外部设备连接。带此接口的电视可以通过这个接口对电视内部的软件进行维护和升级。 ·VGA接口:是源于电脑显卡上的接口,显卡都带此种接口。VGA就是将模拟信号传输到显示器的接口。 ·S端子:是AV端子的改革,在信号传输方面不再对色度与亮度混合传输,这样就避免了设备内信号干扰而产生的图像失真,能够有效地提高画质的清晰程度。 ● 可选接口: ·USB接口:是目前使用较多的多媒体辅助接口,可以连接U盘、移动硬盘等设备。 ·蓝牙接口:是一种短距的无线通讯技术,不需要链接实现了无线听音乐,无线看电视。 ·耳机接口:使用电视无线耳机可在电视静音的情况下,自由欣赏精彩节目。 ● 趋势接口: ·DisplayPort接口:可提供的带宽就高达10.8Gb/s,也允许音频与视频信号共用一条线缆传输,支持多种高质量数字音频。 ● 必备接口:什么是HDMI接口?(王兆贵1157440560) HDMI是新一代的多媒体接口标准,全称是High-Definition Multimedia Interface,中文意思为高清晰多媒体接口,该标准由索尼、日立、松下、飞利浦、东芝、Silicon image、Thomson (RCA)等7家公司在2002年4月开始发起的。其产生是为了取代传统的DVD碟机、电视及其它视频输出设备的已有接口,统一并简化用户终端接线,并提供更高带宽的数据传输速度和数字化无损传送音视频信号。

抽象类与接口的区别

抽象类与接口的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意。 其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。本文将对它们之间的区别进行一番剖析,试图给开发者提供一个在二者之间进行选择的依据。 一、理解抽象类 abstract class和interface在Java语言中都是用来进行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法,请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢? 在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。 比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。 在面向对象领域,抽象类主要用来进行类型隐藏。我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。熟悉OCP的读者一定知道,为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle),抽象类是其中的关键所在。 二、从语法定义层面看abstract class和interface 在语法层面,Java语言对于abstract class和interface给出了不同的定义方式,下面以定义一个名为Demo的抽象类为例来说明这种不同。使用abstract class的方式定义Demo抽象类的方式如下: java 代码 abstract class Demo { abstract void method1(); abstract void method2(); …

第六讲类、对象和接口(二)

第六讲类、对象和接口(二) 1类的继承 继承是类的另一个特性。继承的意义在于:我们重复使用或更改现成的类的方法,也可以加入新的数据成员以及新的方法,以满足新环境的需要。这种技术是所有面向对象的编程语言的一个基本特征。 让我们来看一个例子:前面我们定义了一个Employee类,这只是普通员工,现在我们要定义一个经理类。经理也是员工的一种,所以Employee类中的数据和方法他也应该有;但经理又不同于普通员工,经理有秘书,而且涨工资的时候还要加上分红。怎么办?我们要不要从头开始写一个经理类? 有了继承的技术,我们可以在Employee类的基础上,编写我们的Manager类。程序如下: package teach4; import java.util.Date; class Manager extends Employee { private String secretaryName; public Manager(String n, double s, int d) { super(n, s, d); secretaryName = ""; } public void raiseSalary(double byPercent) { // add 1/2% bonus for every year of service Date today = new Date(2001,1,1); double bonus = 0.5 * (today.getYear()- getHireYear()); super.raiseSalary(byPercent + bonus); } public void setSecretaryName(String n) { secretaryName = n; } public String getSecretaryName() { return secretaryName; } } 我们以这个例子为例,学习继承的用法。 首先,请注意这个类的头部有些不同:class Manager extends Employee;其中,关键字extends是扩展的意思,表明Manager类是从Employee类继承而来。我们把Employee叫做父类或者超类,把Manager叫做子类或者衍生类。一般来说,子类比父类有更多的功能。 Manager的构造方法中有个语句:super(n, s, d),super是一个关键字,意思是调用父

java实验报告 接口、泛型、枚举、内部类与异常

实验报告 课程名称: Java程序设计成绩评定: 实验项目名称:接口、泛型、枚举、内部类与异常指导教师: 学生姓名:学号:专业班级: 实验项目类型:基础实验地点:实验时间: 一、实验目的与要求: 1、理解接口的定义与实现; 2、知道泛型、枚举型与内部类的基本应用; 3、掌握常用异常的抛出与捕获及处理. 二、实验环境:(硬件环境、软件环境) 1.硬件环境:奔ⅣPC。 2.软件环境:Windows XP 操作系统,JDK6.0。 三、实验内容:(原理、操作步骤、程序代码等) 任务: 1、按照要求完成下述接口及实现类的程序 1)定义名称为PCI()的接口,包括启动的方法start和关闭的方法stop; 2)定义名称为NetworkCard 的类表示网卡,实现PCI接口,并且其在实现start 方法时输出“sending data……”,在实现stop方法时输出“network stop.” 3)定义名称为SoundCard 的类表示声卡,实现PCI接口;并且其在实现start 方法时输出“dudu……”,在实现stop方法时输出“sound stop.” 4)定义名称为MainBoard 的类表示主板,包含方法public void usePCICard(PCI p),在方法体内通过p来启动和关闭组件; 5)定义一个包含main方法的Test类,在main方法内创建一个MainBoard 对 象用mb来引用,创建一个NetworkCard对象用nc来引用,创建一个 SoundCard对象用sc来引用,分别通过mb来使用usePCICard(PCI p)启动声 卡和网卡。 2、泛型类程序的调试 调试教材P165的程序8-2,写出程序运行结果,理解泛型类的工作机理及应用。 3、调试运行内部类程序: 在类内部再定义另外一个类,这个另外定义的类就叫内部类。调试教材P171-172程序8-3,写出程序运行结果,理解内部类的定义方法与应用。 4、异常抛出与捕获编程与调试 先调试教材P182、183中的程序9-2和9-3,写出调试结果。然后,自己编写一个能抛出并捕获、处理NullPointerException、NumberFormanException多异常的程序,并调试后写出运行结果。

(完整版)毕设外文翻译-详细解析Java中抽象类和接口的区别

Parsing Java Abstraction of the Difference Between Classes and Interfaces In Java language, abstract scale-up and with support class abstraction definition of two mechanisms. Because of these two kinds of mechanism of existence, just gives Java powerful object-oriented skills. Abstract scale-up and with between classes abstraction definition for support has great similarities, even interchangeable, so many developers into line non-abstract class definition for abstract scale-up and it is becoming more casual with choice. In fact, both between still has the very big difference, for their choice even reflected in problem domain essence of understanding, to design the intentions of the understanding correctly and reasonable. This paper will for the difference analysis, trying to give a developer with a choice between them are based. Understand class abstraction Abstract class and interface in Java language is used for abstract classes (in this article non-abstract class not from abstract scale-up translation, it represents an abstract body, and abstract scale-up for Java language used to define class abstraction in one way, please readers distinguish) defined, then what are the abstract classes, use abstract classes for us any good? In object-oriented concept, we know all objects is through class to describe, but in turn not such. Not all classes are used to describe object, if a class does not contain enough information to portray a concrete object, this class is abstract classes. Abstract classes are often used to characterization of problem field in our analysis, design that the abstract concepts, is to the series will look different, but essentially the same exact conception of abstraction. For example: if we carry out a graphical editing software development, will find problem domain exists round, triangle so some specific concept, they are different, but they all belong to shape such a concept, shape this concept in problem domain is not exist, it is an abstract concept. Precisely because the abstract concepts in problem field no corresponding specific concept, so to characterization abstract concepts non-abstract class cannot be instantiated. In an object-oriented field, mainly used for class abstraction types hidden. We can

Java面试问题:抽象类与接口的区别.

Java面试问题:抽象类与接口的区别2019-01-01 很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题, 。本文我们将仔细讨论这些话题。 在讨论它们之间的不同点之前,我们先看看抽象类、接口各自的特性。 抽象类 抽象类是用来捕捉子类的通用特性的。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。以JDK中的GenericServlet 为例: public abstract class GenericServlet implements Servlet, ServletConfig, Serializable { // abstract method abstract void service(ServletRequest req, ServletResponse res); void init() { // Its implementation } // other method related to Servlet } 当HttpServlet类继承GenericServlet时,它提供了service方法的实现: public class HttpServlet extends GenericServlet { void service(ServletRequest req, ServletResponse res) { // implementation } protected void doGet(HttpServletRequest req, HttpServletResponse resp) { // Implementation } protected void doPost(HttpServletRequest req, HttpServletResponse resp) { // Implementation } // some other methods related to HttpServlet } 接口 接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。以Externalizable 接口为例: public interface Externalizable extends Serializable { void writeExternal(ObjectOutput out) throws

光模块接口区分

三、光纤接口的主要类型: 光纤接口是用来连接光纤线缆的物理接口,通常有SC、LC、FC、ST等几种类型。不同的光模块对应的光纤接口不尽相同。1×9及GBIC光模块通常采用SC光纤接口,而SFP 和XFP封装形式的光模块通常采用LC光纤接口。 LC、SC、FC等均指外形尺寸,PC、APC、UPC都是指光纤连接器的插针端面。 装置在光纤末端使两根光纤实现光信号传输的连接器,光信号通过时只引入很低衰减的装置。 光纤连接器,是光纤与光纤之间进行可拆卸(活动)连接的器件,它把光纤的两个端面精密对接起来,以使发射光纤输出的光能量能最大限度地耦合到接收光纤中去,并使由于其介入光链路而对系统造成的影响减到最小,这是光纤连接器的基本要求。在一定程度上,光纤连接器影响了光传输系统的可靠性和各项性能。 分类 光纤连接器按传输媒介的不同可分为常见的硅基光纤的单模、多模连接器,还有其它如以塑胶等为传输媒介的光纤连接器;按连接头结构形式可分为:FC、SC、ST、LC、D4、DIN、MU、MT等等各种形式。其中,ST连接器通常用于布线设备端,如光纤配线架、光纤模块等;而SC和MT连接器通常用于网络设备端。按光纤端面形状分有FC、PC(包括SPC 或UPC)和APC;按光纤芯数划分还有单芯和多芯(如MT-RJ)之分。光纤连接器应用广泛,品种繁多。在实际应用过程中,我们一般按照光纤连接器结构的不同来加以区分。以下是一些目前比较常见的光纤连接器: FC型光纤连接器 这种连接器最早是由日本NTT研制。FC是Ferrule Connector的缩写,表明其外部加强方式是采用金属套,紧固方式为螺丝扣。最早,FC类型的连接器,采用的陶瓷插针的对接端面是平面接触方式(FC)。此类连接器结构简单,操作方便,制作容易,但光纤端面对微尘较为敏感,且容易产生菲涅尔反射,提高回波损耗性能较为困难。后来,对该类型连接器做了改进,采用对接端面呈球面的插针(PC),而外部结构没有改变,使得插入损耗和回波损耗性能有了较大幅度的提高。 SC型光纤连接器 这是一种由日本NTT公司开发的光纤连接器。其外壳呈矩形,所采用的插针与耦合套筒的结构尺寸与FC型完全相同。其中插针的端面多采用PC或APC型研磨方式;紧固方式是采用插拔销闩式,不需旋转。此类连接器价格低廉,插拔操作方便,介入损耗波动小,

面向对象--接口与抽象类、对象和接口(通俗讲解)

面向对象--接口与抽象类的恩恩怨怨 接口与抽象类是面向对象编程中两个非常重要的角色,二者各自起着非常重要的作用。但是很多初学的朋友往往会对使用接口还是抽象类存在的很大的迷惑。就我自己的一点心得,发表一下拙见。 面向对象的一些回顾: 面向对象世界中有一个古老的法则:接口隔离原则,指的是不要把多个功能全部都集中在一个接口里面。接口实现的功能要相对单一;衍生开来可以得到另外一个结论:对一组或者称一系列功能的实现,尽量定义相对功能单一的小模块来实现这一组功能。这其实也是解耦和的体现。 那这跟我们的接口和抽象类有什么关系呢?那又得摆出另外一个法则:依赖倒置原则,针对接口编程而不是针对实现编程。 说到这,又会有一个新的问题蹦出来,这是自相矛盾啊,既然要针对接口编程还要抽象类干吗使?我们经常说面向对象,面向对象是来源于生活的。是人们要把对现实世界中的一系列方法论应用到程序设计当中来。从对象这一概念的引入我们就可以揣摩这一点。人类社会中有很多对象的概念,人、车、物体。不幸的是用程序来实现这些对象比在概念上定义对象要难很多。 (如果能达成这一共识,您可以继续往下看,否则就请看官您移步至留言讨论吧) MS给出开发者的建议是,用抽象类来实现接口。子类再继承基类。 实例说明: 为什么要这么建议?OK,我们试着结合实际来说明一下这个问题吧。我们要造车。这个车有个基本的属性就是能移动、还必须有轮子。那我们就设计一个接口 1public interface ICar 2 { 3 string Wheel 4 { 5 get; 6 set; 7 } 8 void Move(); 9 } 10

接下来的事情,就是实现了。造什么车都行,继承一下就行。随着科技的发展,我们的车想要飞了。此时当然不能修改这个接口,因为要遵循开闭原则。为什么要遵循?我们可以想一下,人坐上飞机能飞上天。但是也没见谁认为人有会飞这个特性的。那也好办,不许修改,那我再加一个接口。 1interface IFlyable 2 { 3 void Fly(); 4 } 5 好,我们的飞行汽车最后应该是这样的。 1class FlyCar : ICar,IAerocraft 2 { 3 private string wheel = string.Empty; 4 5 public void Fly() 6 { 7 Console.WriteLine("{0}车飞起来了",this.wheel); 8 } 9 public string Engine 10 { 11 get 12 { 13 return wheel; 14 } 15 set 16 { 17 wheel = value; 18 } 19 } 20 21 public void Move() 22 { 23 Console.WriteLine("{0}轮车在走",this.wheel); 24 } 25 } 26 看起来很不错,车能飞能走了。那它现在他的祖宗到底车还是飞行器呢?我们自己在心里辩论一下吧。估计不是很容易辩清楚。 我们前面说过,面向对象的思想来源于现实生活。如果把这组例子引入到现实中来,造会飞的汽车。肯定是要在原有的汽车上面下功夫。比如你装上喷气动力装置,或者装上翅膀。

抽象类和接口的相同和异同点

抽象类和接口的相同和异同点 声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。 接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。 在编写对象的时候会对一些类的方法进行定义。但是并没有具体的实现。而是把它们放到子类中去实现,具有灵活性。在抽象类中可以有抽象方法,也可以没有抽象方法。但是有了抽象方法的类一定是抽象类。 抽象类和接口在JA V A中都是用来表述抽象类的。 在面向对象的概念,所以的对象都是通过类来描述的。但反之则不行。若是一个类中没有包含足够的信息描绘一个具体的对象,这个的类就是抽象类。 在JA V A中除了使用抽象类来实现一定程度的抽象外还可以定义一种特殊的抽象方法----接口(interface)。和抽象类的方法不一样,在抽象类中需要加上关键字abstract来表明某个方法是抽象的,但是在接口中则不需要。 相同点: 1.他们都能不能生成实例,都有抽象方法。 2接口是特殊的抽象类。 3.接口和抽象类的继承都使用的关键字是extends。 不同点: 1.接口的定义的变量默认是public static final型,且必须给其赋初值。所以在实现类中不能重新定义,也不能改变其值。而在抽象类中其值在子类中可以重新定义也可以重新赋值。 2.接口的方法默认的都是public abstract类型的。 3.抽象类中可以有构造器,但是接口中除了抽象方法什么都没有。 4.名字不同,接口写的是public interface Shape{}; 而抽象类写的是public abstract class Shape{}; 接口里全部都是抽象方法。而抽象类里可以有抽象方法也可以有其他的方法。接口里的属性都是静态的。但是抽象类的属性可以是任意的。 5.还可以从继承的角度看,接口可以多继承,一个接口可以继承多个接口。但是抽象类却不能,只能是继承一个父类,不能继承多个父类。要是能继承多个父类的话会在父类和子类的方法中有发生冲突。

相关文档
相关文档 最新文档