文档库 最新最全的文档下载
当前位置:文档库 › 第九章 抽象类与接口

第九章 抽象类与接口

第九章抽象类与接口

1.抽象类与抽象方法(例abstract1)

用abstract修饰的类成为抽象类。抽象类不能被实例化。用

abstract修饰的方法称为抽象方法,没有方法体。

abstract类必须被继承,abstract方法必须被重写。

抽象类中不一定有抽象方法,但有抽象方法的类必须使用抽象类。

2.接口

接口:全局常量与抽象方法的集合。

3.接口的声明(例interface2)

[public]interface 接口名[extends 接口列表(接口的继承)]{

………………(接口体)

}

包含访问权限,若为默认则只有同一包中的类才可访问。extends 后面可以有多个父接口,父接口名之间用逗号隔开。

接口体包含常量定义,方法定义。

常量的定义:(public final)type NAME=value;

type 可以是任意类型。NAME是常量名,通常用大写字母表示。Value是常量值。

方法的定义:(public abstract)返回值类型方法名();

其中(public final)和(public abstract)可写可不写,意义一样。

如果在子接口中定义了和父接口中同名的常量和方法,则父接口

中的常量被隐藏,方法被重写。

Eg:

interface B{ //定义接口

int MAX_NUM=100;//常量的定义

abstract void add(object ob);//抽象方法的定义

}

4.接口的实现(例interface1)

如果要使用接口,就必须编写实现接口的类。如果一个类实现了接口,那么这个类就必须实现接口中定义的所有方法。(所有方法必须实现,常量可以使用)

使用implements 子句表示类要实现的接口。所有的抽象方法都要被重写,重写时抽象方法时必须使用public关键字。

Eg:class A implements B{

Public void add(object ob){//抽象方法实现使用public

………

}

}

5.抽象类与接口的区别:

接口可看做是抽象类的特例。接口中所有方法必须是抽象的,默认为 public abstract 。

语法上的区别如下:

1)抽象类里可以有构造方法,而接口内不能有。

2)抽象类中可以有普通成员变量,而接口中不能有。

3)抽象类可以包含非抽象的普通方法,而接口中所有的方法必

须是抽象的

4)抽象类中抽象方法的访问类型可以使public,protect,和默

认类型,但接口中必须是public,并且默认public abstract

类型。

5)抽象类中包含静态方法,接口能不能包含。

6)抽象类和接口都可以包含静态成员变量,但抽象类中的静态

成员变量的访问类型可以是任意的,但接口中定义的变量只

能是public static类型。

7)一个类可实现多个接口,但只能继承一个抽象类。

6.若一个类既要继承父类有要实现接口,将先继承,后实现接口。

如下:

class C extends B implements A{

……

}

7.内部类(例inner1)

在一个类的内部再定义一个类,就是内部类。

内部类的特性:

1)内部类一般用在定义它的类或语句块内,在外部引用它时必

须给出完整的名称。内部类的名字不能与包含它的类名相同。

2)内部类可以使用包含它的类的静态变量和实力成员变量,也

可以使用他所在的方法的局部变量

3)内部类可以定义为abstract。

4)可以声明为private或protected。

5)内部类如果被声明为static,就变成了顶层类,也就不能在使

用局部变量。只能访问static变量。

8.包

定义:将一些类和接口聚集在一起的实体。

定义一个包 package com.qq.pack

包的导入:

import java.awt.*导入包java.awt下所有的类。但不能

引入子包中的类

Import java.awt.event.*导入子包event中的类

https://www.wendangku.net/doc/ca19069055.html,ng(基础语言包)该包中包含Java语言所需要的基本的功

能类、接口等信息,是进行Java语言编程的基础。(默认导入)

https://www.wendangku.net/doc/ca19069055.html,ng.object

https://www.wendangku.net/doc/ca19069055.html,ng.object处于java开发环境的类层次的根部,其他所有类都直接或间接地成为它的子类。该类定义了一些所有对象最基本的状态和行为,包括以下几种

1)equal方法(例equal1)

equals方法实现的功能是判断两个对象的内容是否相同。

2)finanlize方法

finalize方法的作用和前面介绍的构造方法的概念刚好相反,

构造方法的作用是初始化一个对象,而finalize方法的作用是释

放一个对象占用的内存空间时,会被JVM自动调用的方法。

3)hashcode方法(例ToString1)

hashcode方法作用是获得一个数值,该数值一般被称作散列码,使用这个数值可以快速判断两个对象是否不相同,主要

应用于集合框架中类的快速判断。

两个内容相同的对象,其hashcode方法的返回值必须相同,两个不相同的对象其hashcode的值可能相同。

4)toString方法(例ToString1)

toString方法是显示对象内容时会被系统自动调用的方法,当

输出一个对象的内容时,系统会自动调用该类的toString方法,例如输出Object类型的对象obj,则以下两组代码的功能是一

样的:

System.out.println(obj);

System.out.println(obj.toString());

Math类(例MathDemo)

Math类是一个数学工具类,在Java语言中,常用的数学常数和数学方法都在该类内部,而且无论是常数还是方法都是static 类型的,方便程序员进行实际的使用。

abs方法求绝对值。

10.String类

实例化方法:直接赋值 String str=“开心”;

php面向对象接口抽象类

* 接口 * * * 作用: * 要想使用抽象类,就必须使用一个类去继承抽象类,而且要想使用这个子类,也就是让子类可以创建对象,子类就必须不能再是抽象类,子类可以重写父类的方法(给抽象方法加上方法体) * * 抽象方法中的方法没有方法体,子类必须实现这个方法(父类中没写具体的实现,但子类必须有这个方法名) * * * 就是在定义一些规范,让子类按这些规范去实现自己的功能 * * 目的:就是要将你自己写的程序模块加入到原来已经写好的程序中去(别人写好的程序,不能等你开发完一个小模块,根据你的小模块继续向后开如) * * 多态 * * * * * */ abstract class FileDir { var $filename; var $time; function getName(){ echo "获取文件和目录的名子
"; } function getTime(){ echo "获取文件和目录的创建时间
"; } abstract function getSize(); abstract function copy(); abstract function remove(); abstract function delete(); }

C#抽象类和接口的区别

C#抽象类和接口的区别

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

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

抽象类和接口的相同和异同点 声明方法的存在而不去实现它的类被叫做抽象类(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.还可以从继承的角度看,接口可以多继承,一个接口可以继承多个接口。但是抽象类却不能,只能是继承一个父类,不能继承多个父类。要是能继承多个父类的话会在父类和子类的方法中有发生冲突。

接口和抽象类习题-答案

(一)选择题 1.以下哪个接口的定义是正确的? B{ void print() { } ; } interface B { void print() ; } interface B extends A1,A2 { abstract void print(){ }; } B { void print();} 2.定义一个接口时,下列哪个关键字用不到? 3.定义一个接口时,要使用如下哪个关键字? 4.在使用interface声明一个接口时,只可以使用哪个修饰符修饰该接口。 或者protected 5.下列类头定义中,错误的是 ? x extends y class x extends y x extends y implements y1 x

6.下列类定义中,不正确的是? x x extends y x implements y1,y2 class x extends X1,X2 7.Java中能实现多重继承功能的方式是? A.接口 B.同步 C.抽象类 D.父类 8.下列叙述正确的是? 中允许多重继承 一个类只能实现一个接口 中只能单重继承 中一个类可以继承多个抽象类 (二)简答题 1)接口中方法的修饰符都有哪些?属性的修饰符有哪些?2)接口的作用是什么?简述接口与类的关系。 3)请写出下列输出结果。 interface A { int x = 1; void showX(); } interface B { int y = 2; void showY();

} class InterfaceTest implements A, B { int z = 3; public void showX() { "x=" + x); } public void showY() { "y=" + y); } public void showMe() { "z=" + (z + x + y)); } } public class Class1 { public static void main(String[] args) { InterfaceTest myObject = new InterfaceTest(); (); (); (); } } X=1 Y=2 Z=6 (三)编程题

Java接口和抽象类的应用

Java接口和抽象类的应用 Java是一门强大的编程语言,它提供了许多特性来实现代码的组织和重用。其中,接口和抽象类是两个重要的概念,它们在面向对象编程中起着关键的作用。本文将探讨Java接口和抽象类的应用,并讨论它们的区别和优劣势。 一、接口的概念和应用 在Java中,接口是一种定义了一组相关方法的集合,它没有实现任何方法的具体代码。接口主要用于定义类的行为规范,让不同的类实现相同的接口,从而确保它们能够提供相似的功能。接口的语法形式如下: ```java public interface InterfaceName { // 声明方法,但不提供具体实现 public void methodName(); } ``` 接口中的方法默认是公共的和抽象的,不需要使用`public`和 `abstract`关键字进行修饰。我们可以通过`implements`关键字将接口应用于类,示例如下: ```java

public class ClassName implements InterfaceName { // 实现接口中定义的方法 public void methodName() { // 具体实现 } } ``` 接口的应用使得我们能够实现多态性,即通过一个统一的接口调用不同类的方法。这种设计可以提高代码的可扩展性和可维护性,例如在一个图形界面应用中,我们可以定义一个`Clickable`接口来表示可点击的组件,不同的按钮、菜单等组件都可以实现该接口,并重写点击方法以提供具体的功能。 二、抽象类的概念和应用 与接口类似,抽象类也是一种用于定义类的模板的特殊类。不同之处在于,抽象类可以包含实现了的方法,并且不能直接实例化。抽象类的语法形式如下: ```java public abstract class AbstractClassName { // 声明方法,可以包含具体实现 public void methodName() {

抽象类和接口习题.doc

、易错概念题 1.以下方法错误的是(A D) A覆盖方法包括成员方法的覆盖和成员变量的覆盖 B成员方法的覆盖是多态的一种表现形式 C子类可以调用父类中被覆盖的方法 D任何方法都可以被覆盖 分析:在子类中调用父类方法使用super关键字。super, a0就可以调用父类的 a方法。 在类继承或者接口实现过程中就会涉及到成员属性以及成员函数的重写,需要注意的是,成员函数的重写是直接覆盖父类的(继承中),但是成员变量重写是不会进行覆盖的。 如果子类本身没有定义使用this关键字可以去访问父类的成员变量。 最后final修饰的方法不能被覆盖覆盖即重写和重载一起都是多态的表现形式。 (重载、重写和覆盖) override-〉重写(=覆盖)、overload-〉重载、polymorphism -> 多态 override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在 继承父类时,重写(重新实现)父类中的方法。 重写(覆盖)的规则: 1、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载. 2、重写方法的访问修饰符一定要大于被重写方法的访问修饰符 (public>protected>default>private)。 3、重写的方法的返回值类型必须和被重写的方法的返回一致; 4、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类; 5、被重写的方法不能为private,否则在其子类中只是新定义了一个方法, 并没有对其进行重写。 6、静态方法不能被重写为非静态的方法(会编译出错)。 overload是重载,一般是用于在一个类内实现若干重载的方法,这些方法的名 称相同而参数形式不同。 重载的规则: 1、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样); 2、不能通过访问权限、返回类型、抛出的异常进行重载; 3、方法的异常类型和数目不会对重载造成影响; 对比:如果用重载,则在父类里要对应每一个子类都重载一个取得边数的方法;

理解Java的接口与抽象类

理解Java的接口与抽象类 对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口和抽象类。下面是本文的目录大纲: 一.抽象类 二.接口 三.抽象类和接口的区别 一.抽象类 在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为: abstract void fun(); 抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。 下面要注意一个问题:在《JAVA编程思想》一书中,将抽象类定义为“包含抽象方法的类”,但是后面发现如果一个类不包含抽象方法,只是用abstract修饰的话也是抽象类。也就是说抽象类不一定必须含有抽象方法。个人觉得这个属于钻牛角尖的问题吧,因为如果一个抽象类不包含任何抽象方法,为何还要设计为抽象类?所以暂且记住这个概念吧,不必去深究为什么。 [public] abstract class ClassName { abstract void fun();} 从这里可以看出,抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为你不能用它来做任何事情。对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了。 包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别:

实验五 包、接口 抽象类

实验五包、接口抽象类 【开发语言及实现平台或实验环境】 Windows2000 或XP,JDK1.6与Eclipse 【实验目的】 1. 理解抽象类和接口概念 2. 掌握接口、抽象类的设计方法。 3. 理解和掌握接口的实现和通过接口访问方法 【实验要求】 1. 理解和掌握抽象类的定义与作用。 2. 掌握使用系统接口的技术和创建自定义接口的方法。 【实验内容】 一.抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。如果我们要开发一个作图软件包,就会发现问题领域存在着点、线、三角形和圆等这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。 1.抽象方法 抽象方法的声明格式如下:abstract returnType abstractMethodName([paramlist]); 抽象方法只能出现在抽象类中。如果一个类中含有抽象方法,那么该类也必须声明为抽象的,否则在编译时编译器会报错 2. 抽象类 定义一个抽象类需要关键字abstract,其基本格式如下: abstract class ClassName{ ... } 抽象类不能被实例化,在程序中如果试图创建一个抽象类的对象,编译时Java编译器会提示出错。 二.static 声明的成员变量/方法被视为类的成员变量/方法,而不把它当作实例对象的成员变量/方法。换句话说,静态变量/方法是类固有的,可以直接引用,其它成员变量/方法仅仅被声明,生成实例对象后才存在,才可以被引用 1.写出程序运行结果 class StaticDemo { static int x; int y; static{ x=10; } public static int getX() { return x; } public static void setX(int newX) { x = newX;

实验5:Java抽象类与接口

实验5:Java抽象类与接口 实验时间:实验地点:一、实验目的及要求 (1)掌握抽象类的概念及使用。 (2)掌握接口的概念和实现方式。 (3)理解抽象类和接口的区别。 二、实验设备环境及要求 三、实验任务 (1)输入给定的Java Application程序,写出运行结果。 (2)按照要求编写Java Application程序。 四、实验内容与步骤 1.分析下列程序的输出结果。 interface Myface{ int getnext(); void setstart(int x); } class Add3 implements Myface{ int sta,val; Add3(){ sta=0;val=0; } public int getnext(){ val+=3; return val; } public void setstart(int i){ sta=i;

val=i; } } public class Face{ public static void main(String args[]){ Add3 a=new Add3(); for(int i=0;i<5;i++) System.out.println(a.getnext()); System.out.println(); a.setstart(10); for(int i=0;i<5;i++) System.out.println(a.getnext()); } } 2.按照要求编写Java Application程序。 假定要为某个公司编写雇员工资支付程序。这个公司有各种类型的雇员(Employee),不同类型的雇员按不同的方式支付工资: 经理(Manager):每月获得一份固定的工资; 销售人员(Salesman):在基本工资的基础上每月还有销售提成; 一般工人(Worker):则按他每月工作的天数计算工资。 试用类的继承及相关机制描述这些功能需求,并编写一个Java Application程序,演示这些类的用法。 五、实验指导与处理 六、分析讨论

abstract类和abstract方法的声明;接口的声明与实现

abstract类和abstract方法的声明;接口的声明与实现 摘要: 1.抽象类与抽象方法的声明 2.接口的声明 3.接口的实现 4.实例分析:如何使用抽象类与接口 正文: 在Java编程中,抽象类和接口是两种非常重要的概念。它们可以帮助我们更好地组织代码,提高代码的可读性和可维护性。下面我们将详细介绍抽象类、抽象方法、接口的声明与实现,以及如何运用它们。 一、抽象类与抽象方法的声明 抽象类是一种不能实例化的类,它只能通过继承来实现。抽象类中可以包含普通方法和抽象方法。抽象方法是没有方法体的方法,它用关键字"abstract"声明,并且必须包含在抽象类中。抽象类和抽象方法的主要作用是规定子类必须实现的方法,以约束子类的行为。 例如,我们可以声明一个抽象类Animal,其中包含一个抽象方法sound(): ```java abstract class Animal { abstract void sound(); }

二、接口的声明 接口是一种完全抽象的规范,它不含任何实现。接口中只包含抽象方法和常量。接口的声明使用关键字"interface",并且接口之间可以继承。接口的主要作用是规定实现类必须遵循的行为规范。 例如,我们可以声明一个接口Flyable,规定实现类必须有一个fly() 方法: ```java interface Flyable { void fly(); } ``` 三、接口的实现 要实现一个接口,类需要使用"implements" 关键字。实现接口的类必须提供接口中所有抽象方法的实现。同时,类还可以继承其他类,实现多继承。 例如,我们可以实现Flyable 接口,并创建一个鸟类类Bird: ```java class Bird implements Flyable { @Override public void fly() { System.out.println("I can fly!"); }

简述抽象类和接口的区别

简述抽象类和接口的区别 抽象类 抽象类是用来捕捉子类的通用特性的。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。以JDK中的GenericServlet为例: public abstract class GenericServlet implements Servlet, ServletConfig, Serializable { // abstract method abstract void serviceServletRequest req, ServletResponse res; void init { // Its implementation } // other method related to Servlet } 当HttpServlet类继承GenericServlet时,它提供了service方法的实现: public class HttpServlet extends GenericServlet { void serviceServletRequest req, ServletResponse res { // implementation } protected void doGetHttpServletRequest req, HttpServletResponse resp { // Implementation } protected void doPostHttpServletRequest req, HttpServletResponse resp { // Implementation } // some other methods related to HttpServlet

接口和抽象类的区别

.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.面向接口编程和面向对象编程是什么关系 首先,面向接口编程和面向对象编程并不是平级的,它并不是比面向对象编程更先进的一种独立的编程思想,而是附属于面向对象思想体系,属于其一部分。或者说,它是面向对象编程体系中的思想精髓之一。 2.接口的本质 接口,在表面上是由几个没有主体代码的方法定义组成的集合体,有唯一的名称,可以被类或其他接口所实现(或者也可以说继承)。它在形式上可能是如下的样子: interface InterfaceName { void Method1(); void Method2(int para1); void Method3(string para2,string para3); }

那么,接口的本质是什么呢?或者说接口存在的意义是什么。我认为可以从以下两个视角考虑: 1)接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则。体现了自然界“如果你是……则必须能……”的理念。 例如,在自然界中,人都能吃饭,即“如果你是人,则必须能吃饭”。那么模拟到计算机程序中,就应该有一个IPerson(习惯上,接口名由“I”开头)接口,并有一个方法叫Eat(),然后我们规定,每一个表示“人”的类,必须实现IPerson接口,这就模拟了自然界“如果你是人,则必须能吃饭”这条规则。 从这里,我想各位也能看到些许面向对象思想的东西。面向对象思想的核心之一,就是模拟真实世界,把真实世界中的事物抽象成类,整个程序靠各个类的实例互相通信、互相协作完成系统功能,这非常符合真实世界的运行状况,也是面向对象思想的精髓。 2)接口是在一定粒度视图上同类事物的抽象表示。注意这里我强调了在一定粒度视图上,因为“同类事物”这个概念是相对的,它因为粒度视图不同而不同。 例如,在我的眼里,我是一个人,和一头猪有本质区别,我可以接受我和我同学是同类这个说法,但绝不能接受我和一头猪是同类。但是,如果在一个动物学家眼里,我和猪应该是同类,因为我们都是动物,他可以认为“人”和“猪”都实现了IAnimal这个接口,而他在研究动物行为时,不会把我和猪分开对待,而会从“动物”这个较大的粒度上研究,但他会认为我和一棵树有本质区别。 现在换了一个遗传学家,情况又不同了,因为生物都能遗传,所以在他眼里,我不仅和猪没区别,和一只蚊子、一个细菌、一颗树、一个蘑菇乃至一个SARS病毒都没什么区别,因为他会认为我们都实现了IDescendable这个接口(注:descend vi. 遗传),即我们都是可

软件开发中的抽象类和接口

软件开发中的抽象类和接口 在软件开发中,抽象类和接口是两个重要的概念。它们都可以用 来表示通用的类别,但在实际应用中,它们有不同的用途和实现方式。 抽象类是一种不能被实例化的类,它包含了一些抽象方法,这些 方法没有具体的实现,只是给出了一些接口。具体的实现由继承该类 的子类来完成。抽象类中的方法和属性可以有具体的实现,也可以是 抽象的。抽象类的主要作用是可以作为其他类的基类,定义一些通用 的行为,子类可以继承并实现具体的方法。 接口是一种特殊的类,它只包含抽象方法和常量属性,没有具体 的实现。接口类相当于是对使用方的要求,对于实现此接口的类,必 须保证这些方法必须按照该接口的规范实现。接口还可以用于实现多 重继承,一个类可以实现多个接口,从而实现多重继承的效果。 在实际开发中,抽象类和接口都有各自的应用场景。抽象类通常 用于表示某个类的通用抽象概念,其中的具体实现由子类来完成。比如,一个游戏开发中,抽象类可以用来表示游戏中的人物,人物有各 种各样的属性和方法,但是这些属性和方法都可以被定义在父类中,

子类继承并实现具体的方法。这样可以不仅可以减少代码的重复,也 提高了代码的灵活性和可扩展性。 而接口则适用于表示某种特定的要求,用于规范类的行为和属性。比如在一些Web开发中,可能需要实现一些文件上传功能。这时候就 可以定义一个Uploadable接口,要求实现该接口的类必须实现上传文 件的方法,并保证上传文件的格式和大小符合特定要求。这样的话, 无论是文件上传的框架还是实际调用部分,都可以针对Uploadable接 口来实现,从而提高了代码的灵活性和可复用性。 另外,抽象类和接口还有一些区别。首先,抽象类的方法可以有 实现,也可以没有,而接口的方法必须全部都是抽象方法。其次,一 个类只能继承一个抽象类,但是可以实现多个接口。此外,抽象类中 可以有构造函数,接口中不能有。最后,抽象类可以获得子类的数据,但是接口不能。 总的来说,在软件开发中,抽象类和接口都是非常重要的概念。 它们可以用来表示通用的类别,提高代码的重用性和灵活性。抽象类 适合于表示类的抽象概念和行为,而接口适合于规范类的特定要求和

抽象类、接口

JA VA面向对象概念之抽象与接口的意思以及区别 抽象类不可以被实例化,而且里面的方法有时候是空的,如果声明为抽象方法的话甚至没有方法体。那抽象类有什么用?但是抽象类可以被继承,我们可以设计一个“中国人”继承“人类”并重写人类中的抽象方法。这样使用的时候我们可以这样 Human aMan; aMan = new Chinese(); 这样在声明的时候我们并不需要知道是中国人还是美国人,或者日本猪。直到具体指向某个对象的时候才知道。这很有用。假设我们有一个方法可以,输入一个人,可以返回这个人说的语言。简单举例 public String language(Human aMan) { if(aMan.nationality=="中国") return == "Chinese"; if(aMan.nationality=="美国") return "English"; } aMan的类型在设计的时候并不知道是中国人还是美国人,所以就用他们功能的父类人类。 这就是java的向上转型机制。当然,如果只是这样简单的用人类并不一定要抽象类,具体类也可以被继承。但这就涉及到我们编写程序的时候逻辑问题了。有时候你设计一个类,并不希望使用你这个类的人直接实例化,太抽象的东西实例化是没有意义的,就要用到抽象类了。 接口就更加抽象了,它里面的方法不允许有方法体。它也不能被实例化,也不能被继承。那他到底有什么用?它可以被“实现” interface Human{ void run(); void walk(); } 上面人类这个接口有两个抽象方法。 实现这个接口就是 public class Chinese implements Human { //...... } 你可以简单地理解为这样和继承差不多。但是区别在哪里呢?因为在java中是不可以多重继承的。这样将导致很多问题。所以接口就是用来弥补这个不能多重继承的缺陷。显然,一可以同时实现很多个接口。以达到多重继承的效果。 +++++++++++++++++++++++++++++++++++++++1)接口中不能有非抽象方法,但抽象类中可以有。 2)一个类能实现多个接口,但只能有一个父类。

抽象类和接口的概念

在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了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抽象类的方式如下:

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