abstract class和interface有什么区别
1、构造方法不同:
抽象类可以有构造方法,接口中不能有构造方法。抽象类中可以有普通成员变量,接口中没有普通成员变量。抽象类中可以包含非抽象普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的方法。
2、访问权限不同:
抽象类中的抽象方法的访问权限可以是 public、protected 和(默认类型,虽然 eclipse 不报错,但也不能用,默认类型子类不能继承),接口中的抽象方法只能是 public 类型的,并且默认即为 public abstract 类型。
3、变量类型不同:
抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问权限可以是任意的,但接口中定义的变量只能是 public static final 类型的,并且默认即为 public static final 类型。
4、书写规范不同:
一个类可以实现多个接口,用逗号隔开,但只能继承一个抽象类,接口不可以实现接口,但可以继承接口,并且可以继承多个接口,用逗号隔开。
参考资料来源:百度百科-interface
参考资料来源:百度百科-abstract(抽象修饰符)
区别如下:
1、继承关系:abstract class抽象类可以继承一个类和实现多个接口;子类只可以继承一个抽象类。Interface接口只可以继承接口(一个或多个);子类可以实现多个接口。
2、访问修饰符:abstract class抽象方法可以有public、protected和default这些修饰符。Interface接口方法默认修饰符是public。你不可以使用其它修饰符。
3、方法实现:abstract class可定义构造方法,可以有抽象方法和具体方法。Interface接口完全是抽象的,没构造方法,且方法都是抽象的,不存在方法的实现。
4、实现方式:abstract class子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。Interface子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现。
5、作用:abstract class把相同的东西提取出来,即重用。Interface为了把程序模块进行固化的契约,是为了降低偶合。
扩展资料
abstract class的定义:
含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。
abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。
interface的定义:
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
参考资料来源:百度百科——abstract class
参考资料来源:百度百科——interface
区别如下:
1、定义:包含抽象方法的的类是abstract class,用abstract关键字修饰。Interface比abstract class更加抽象,是一种特殊的abstract class,用Interface关键字修饰。
2、作用:abstractclass是为了把相同的东西提取出来,即重用。Interface是为了把程序模块进行固化的契约,是为了降低偶合。
3、继承:abstract class抽象类可以继承一个类和实现多个接口;子类只可以继承一个抽象类 。Interface接口只可以继承接口(一个或多个);子类可以实现多个接口。
4、访问修饰符:abstract class抽象方法可以有public、protected和default这些修饰符;Interface接口方法默认修饰符是public。不可以使用其它修饰符。
5、方法实现:abstract class可定义构造方法,可以有抽象方法和具体方法;Interface接口完全是抽象的,没构造方法,且方法都是抽象的,不存在方法的实现。
6、实现方式:abstract class子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现;Interface子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现。
实例:
下面以定义一个名为Demo的抽象类为例来说明这种不同。
1、使用abstract class的方式定义Demo抽象类:
2、使用interface的方式定义Demo抽象类:
扩展资料:
1、抽象类(abstract class)和接口(Interface)是Java语言中对于抽象类定义进行支持的两种机制,赋予了Java强大的面向对象能力。
2、抽象类运用意义
在面向对象方法中,抽象类主要用来进行类型隐藏。构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。
这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个抽象体。
由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle),抽象类是其中的关键所在。
参考资料:百度百科-Abstract class
参考资料:百度百科-interface
参考资料:百度百科-抽象类
1、继承的区别
抽象类abstract class可以继承一个类和实现多个接口,子类只可以继承一个抽象类。接口Interface只可以继承接口(一个或多个),子类可以实现多个接口。
2、变量的区别
abstract class可有私有的,默认是friendly型,其值可以在子类中重新定义,也可以重新赋值。interface不可有私有的,默认是public static final型,且必须给其初值,实现类中不能重新定义,不能改变其值。
3、实现方式的区别
抽象类abstract class:子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。接口Interface:子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现。
4、应用的区别
接口interface更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类abstract class在代码实现方面发挥作用,可以实现代码的重用。
参考资料:
abstract class 在Java中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
一、在abstract class 中可以有自己的数据成员,也可以有非abstarct的方法。而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的。不过在 interface中一般不定义数据成员),所有的方法都是public abstract的。
抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。接口中定义的变量默认是public static final 型,且必须给其赋初值,所以实现类中不能重新定义,也不能改变其值。
二、abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。
实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
三、abstract class 和 interface 是 Java语言中的两种定义抽象类的方式,它们之间有很大的相似性。但是对于它们的选择却又往往反映出对于问题领域中的概念本质的理解、对于设计意图的反映是否正确、合理,因为它们表现了概念间的不同的关系。
扩展资料:
一、含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。
二、abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。
三、接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
参考资料:百度百科—abstract class