在一个遗留系统中看到IbaseDao接口中声明的某些方法加了abstract,想不明白为什么?
去网上查了一下,得到的答案是:
加不加abstract都一样,在interface中的方法全部都默认是abstract方法,所以interface中加不加abstract的意思是一样的,而且不能有方法体。
有人说这是c++程序员写java程序的遗留习惯..
c++没interface只有abstract class,方法必须加abstract修饰。
这里继续整理一下接口与抽象类的联系与区别:
联系:
接口是一个特殊的抽象类,接口中的所有方法默认都加上了public abstract。
区别:
1.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
2.抽象类的属性可以具有访问级别,而接口的属性必须是public static的。
3.抽象类中可以有普通成员变量,接口中没有普通成员变量,接口中的成员变量类型默认为public static final。
4.一个类可以实现多个接口,但只能继承一个抽象类。
5.接口没有构造方法,也就是不能被实例化,Interfaces cannot have constructors。抽象类虽然可以添加构造方法,但是也不允许实例化,Cannot instantiate the type xx,因为抽象类代表的是一类事物,不够具体,站在面向对象 的角度看,实例化抽象类没有任何意义。
二者在应用上的区别:
接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用。
模板方法设计模式是抽象类的一个典型应用。
具体讲解见:http://yxwang0615.iteye.com/blog/1001855
参考文章:
http://www.iteye.com/topic/760018
分享到:
相关推荐
此外,接口可以被`abstract`和`密封`(`sealed`)修饰,但这在C#中并没有实际意义,因为接口本身就是抽象的,且不能被实例化。 #### 1.2 基接口 接口可以继承其他接口,使用`:`操作符来指定基接口,如`interface ...
* 类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。 * 抽象类可以在不提供接口方法实现的情况下实现接口。 * Java...
接口中的所有成员默认都是public和abstract的,因此无需显式声明。此外,接口可以包含常量(final static变量)但不能包含实例变量。 接下来,我们看如何在类中实现接口。一个类可以实现一个或多个接口,通过关键字...
这里定义了一个`DB`接口,该接口声明了两个方法:`openDB`用于打开数据库连接,`close`用于关闭连接。`Mysql`类实现了`DB`接口,并提供了具体的实现细节。 #### 工厂模式的应用 为了更好地管理和创建不同类型的...
- 抽象类可以包含部分实现,而接口只能包含方法声明。 - 类可以继承一个抽象类,但可以实现多个接口。 - 抽象类更适用于有共同属性和方法的类的基类,而接口则更侧重于行为的定义。 5. **接口的测试**: 测试...
根据给定的信息,我们可以从中提炼出关于.NET框架中接口(Interface)与抽象类(Abstract Class)的相关知识点。这里主要探讨了接口与抽象类在.NET开发中的应用及其重要性。 ### 接口(Interface) #### 定义 接口...
抽象方法是指在抽象类中声明的方法,但没有具体的实现。子类必须实现抽象方法,否则子类也将是一个抽象类。 例如,我们可以定义一个抽象类“水果(Fruit)”,它有几个子类“苹果(Apple)”、“橘子(Orange)”、...
// 实现所有接口中声明的方法 } ``` 在了解了接口和抽象类的定义和使用格式之后,我们可以根据以下几点来选择使用接口还是抽象类: 1. **成员实现详情**:抽象类可以提供成员的实现详情,而接口不能。如果你...
接口中的方法默认是`public abstract`的,但从Java 8开始,接口也可以包含默认方法(使用`default`关键字)和静态方法。 #### 五、案例分析 根据题目中给出的代码示例,我们可以看到: 1. **抽象类的定义**: ``...
- 在C#中,接口用`interface`关键字声明,方法默认为`public abstract`,即所有成员都是公开的抽象方法。 - 类通过使用`: InterfaceName`来实现接口,必须提供接口中所有方法的具体实现。 - 类可以实现多个接口,...
如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现, 那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了。 包含抽象方法的类称为抽象类,但并...
- **接口的实现**:类实现接口时,必须实现接口中声明的所有方法,除非该类也被声明为抽象类。 #### 二、接口与类的比较 **1. 多态性与抽象** - 类通过继承实现多态性,而接口则通过实现机制提供多态性。类可以...
接口在某些语言中(如Java和C#)是独立于实现的类型声明,但在Python中,接口的概念相对较弱,因为所有类本质上都是接口。然而,我们可以通过约定或使用`abc`模块来模拟接口。比如,如果我们想要定义一个`Printable`...
接口中的方法默认是public和abstract类型的,这意味着任何实现接口的类都必须以public访问修饰符来实现这些方法。这保证了接口的抽象性同时,通过抽象方法的定义,接口又确立了一种规范。 低耦合度的体现 接口的...
在Java和C#等语言中,我们用`abstract`关键字来声明一个类为抽象类。 例如: ```java public abstract class Animal { public abstract void sound(); public void eat() { // 具体实现 } } ``` 在这个例子中,...
在Java中,使用`abstract`关键字来标识一个方法或类为抽象的。一个包含抽象方法的类必须声明为抽象类。抽象类不能被实例化,只能作为其他类的基类,通过继承来提供具体实现。一个类继承抽象类时,必须实现所有未被...
- **抽象方法**:没有具体实现,只有方法签名,用 `abstract` 关键字声明。子类继承抽象类时,必须实现这些抽象方法,除非自身也成为抽象类。 4. **定义抽象类的意义**: - 提供公共类型:抽象类的引用可以指向...
覆盖方法声明不能包括new,static,virtual或abstract限定符中的任何一个,对于一个覆盖声明,除非下面都是可行的,否则,编译时就会出错: * 一个被覆盖的基本方法能被定位; * 被覆盖的基本方法是虚拟的、抽象的...
在提供的代码示例中,类`MyListener`实现了两个接口但没有实现`ItemListener`接口中的`itemStateChanged()`方法,因此会产生编译错误。 ### 7. 常量的定义 在Java中定义常量时,通常使用`public static final`修饰...