Java中选择抽象类和接口的原则

作者&投稿:寸常 (若有异议请与网页底部的电邮联系)
java中抽象类和接口的区别?~

抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。
接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。

扩展资料:
抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
通常在编程语句中用 abstract 修饰的类是抽象类。在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象;在java中,含有抽象方法的类称为抽象类,同样不能生成对象。
抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。
参考资料:抽象类百度百科 接口百度百科

接口可以多实现,抽象类却只能单继承。
interface A{}
interface B{}
public class C implements A,B{
}

abscract A{}
abscract B{}
public class C extends A{
}
这样的话可以看出接口明显优于抽象类,所以一般情况下都用接口.
但是抽象类是不是就没用用呢?
如果学过java设计模式的话可以看到适配器模式,这里面为什么会把很多的父类设定为抽象类,因为抽象类中的方法你可以做空实现处理,如果一个子类直接继承了你这个父类,其实我只是要用你里面的一个方法,如果做成接口的话,我必须每个方法都要去实现,但是抽象类的话,你只需要去覆盖你需要的方法即可。
interface A{
public void MethodA();
public void MethodB();
}
public abstract class B{
public void MethodA(){}
public void MethodB(){}
}
public class C extneds B{
public void MethodA(){
//覆盖该方法
}
}

class E{ public void a(D d){...} } 在类E的a(..)方法的参数用什么呢
方法参数只用用D的实例

但是如果你定义了public void a2(A a)
那你就可以用A, D了。

就是类似A--->动物接口, d是A的实现(小猫),所以d肯定是动物

所以当你碰到方法里面定义A(动物)的时候,你传递A D都可以,
但是如果参数是D(小猫),你就不能传递A了,随便一个动物都是小猫么?就是这个道理。

类E的a(..)方法的参数是 D的实例,也就是d 。你可以在E中用 "d ."调用 A、B、C、D中的任意方法

部知道

你问你问题没说清

1、interface是接口,他常用于“宣称自己提供了什么功能(或者我能做什么),所有实现了我的人,都必须要实现我所提供的功能,”,他往往不关心实现自己的类具体是什么,只关心,实现类是否有我所提供的功能。
2、abstract class是抽象类,他很强调“我是什么,我本身有什么属性、方法,所有继承我的人都是由我派生来的,我所有的方法,子类都可以用,并且可以重写”。
你体会下两者的不同。
同时,一个类继承某一父类,并且同时实现了多个接口的情况是很常见的。
至于说什么情况下用什么类型的参数?应该是什么时候,用什么类型来容纳具体对象吧?
一般实现了接口的实现类,都是因为另一东西想要调用接口的方法,所以你在调用接口的方法的时候,就用接口的类型来声明具体对象,例如,下面代码,你如果是想让B shout,就用A a=new B();a.shout();
interface A{ void shout();};
class B implement A(//
public void shout(){}
)
至于,你提到的。 class E{ public void a(D d){...} }
这种情况,这个类做为参数被使用时,具体用什么类型的参数,取决于,在方法里,你要调用d的那个方法,是属于接口的?就用接口类型【好处是这方法,实现了接口的其它类也能使用。】;属性父类的?就用父类的类型【好处是这方法,同一父类的其它子类也能用】,当然,如果这方法本身就是给这个类设定的(又在调用接口方法,又在用父类方法,甚至还在用子类自己的方法),说明这方法本身就是针对子类的,就直接传子类的类型。

希望对你有所帮助。


JAVAEE是什么?与JAVA 有什么区别?
AVAEE是指java enterprise edition,java企业版,多用于企业级开发,包括web开发等等很多组建;Java和JavaEE区别:1. Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

JAVA有哪些基本数据类型啊
Java 还提供了Byte、Short、Boolean、Character、Integer、Double、Float和Long等内置的封装类。这些封装 (wrapper)类提供了很直观的实用方法。比如,Byte、Float, Integer、Long和Double类都具有doubleValue()方法,通过它可以把存储在类的实例中的值转换为Double类型。还有,所有 的封装类都提供了静态的val...

Java语言的特点
并发性:JAVA支持多线程技术,就是多个线程并行机制,多线程是Java的一个重要方法,特别有利于在程序中实现并发任务.Java提供Thread线程类,实现了多线程的并发机制.然而,程序的并发执行必定会出现多个线程互斥访问临界资源的局面,因而并发系统解决的关键就是对临界资源的管理和分配问题,而在进行临界资源分配时有两方面需要考...

Java语言主要特点有哪些?
1、Java语言是简单的。2、Java语言是一个面向对象的。3、Java语言是分布式的。4、Java语言是健壮的。5、Java语言是安全的。6、Java语言是体系结构中立的。7、Java语言是可移植的。8、Java语言是解释型的。9、Java是高性能的。10、Java语言是多线程的。11、Java语言是动态的。Java语言的优良特性使得J...

JVM原理是什么?
方法表:一个数组,包括所有它的实例可能调用的实例方法的直接引用(包括从父类中继承来的)除此之外,若某个类不是抽象和本地的,还要保存方法的字节码,操作数栈和该方法的栈帧,异常表。举例:classLava{ privateintspeed=5; voidflow(){} classVolcano{ publicstaticvoidmain(String[]args){ Lavalava=newLava();...

String,StringBuffer和StringBuilder的区别
抽象类与接口的其中一个区别是:抽象类中可以定义一些子类的公共方法,子类只需要增加新的功能,不需要重复写已经存在的方法;而接口中只是对方法的申明和常量的定义。StringBuilder、StringBuffer的方法都会调用AbstractStringBuilder中的公共方法,如super.append(...)。只是StringBuffer会在方法上加synchronized...

Java编程的特点是什么呢
面向对象是一种程序设计技术,非常适合大型软件的设计和开发。由于C++为了照顾大量C语言使用者而兼容了C,使得自身仅仅成为了带类的C语言,多少影响了其面向对象的彻底性!Java则是完全的面向对象语言。四、简单性 Java就是C++语法的简化版,我们也可以将Java称之为“C++-”。跟我念“C加加减”,指的...

Java语言主要特点有哪些?
对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。 5、Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类...

Java培训的主要内容是什么?
学员将了解Java的数据类型、运算符、流程控制、数组、字符串等基础知识,并通过实例演示加深理解。2. 面向对象编程:学习面向对象编程的原理和方法,掌握封装、继承、多态等重要特性的应用。此外,还将学习设计模式,提高代码的可维护性和扩展性。3. Java核心库:学习Java标准库(Java API)中常用类和接口...

java和javaweb和web的区别
JAVA:逻辑能力方面要求较高,书写的后台代码以及数据库操作,无法实时展示,较抽象,无法所做即所得、随时查看效果。WEB前端与JAVA学习的适用人群 适用人群是基于两种技术特点而定 WEB前端:学习者逻辑能力一般,喜欢处理样式、制作网页特效,希望即时性的看到代码效果 JAVA:学习者逻辑能力很强,注重非可视...

新罗区15739641672: Java中选择抽象类和接口的原则 -
闵亮小儿: class E{ public void a(D d){...} } 在类E的a(..)方法的参数用什么呢 方法参数只用用D的实例 但是如果你定义了public void a2(A a) 那你就可以用A, D了.就是类似A--->动物接口, d是A的实现(小猫),所以d肯定是动物 所以当你碰到方法里面定义A(动物)的时候,你传递A D都可以,但是如果参数是D(小猫),你就不能传递A了,随便一个动物都是小猫么?就是这个道理.

新罗区15739641672: 在java中,什么事接口,接口的特点是什么? -
闵亮小儿: Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能).一.接口含义:1.Java接口,...

新罗区15739641672: 抽象类和接口的区别是什么?你在使用上是如何选择的? -
闵亮小儿: 一、抽象类里面的方法可以有实现,但是接口里面的方法确是只能声明.二、接口是设计的结果 抽象类是重构的结果 三、java不支持多重继承,所以继承抽象类只能继承一个,但是可以实现多个接口.1 接口是核心,其定义了要做的事情,包含...

新罗区15739641672: JAVA 接口和抽象类的区别 -
闵亮小儿: 区别点:1)定义:抽象类是用abstract关键字修饰,包含至少一个抽象方法的类;接口是用interface修饰的抽象方法和全局常量的集合.2)组成:抽象类由构造方法、抽象方法、普通方法、常量和变量组成;接口由常量和抽象方法组成.3)使...

新罗区15739641672: java中接口和抽象类的区别是什么 -
闵亮小儿: 定义的关键字:abstract class;interface; 组成:常量,变量,抽象方法,普通方法,构造方法;全局常量,抽象方法; 权限:可以是各种权限;只能是public; 关系:抽象类可以实现多个接口;接口不能实现抽象类; 使用:子类利用extends;子类利用implements实现接口; 涉及的设计模式:模板设计模式;工厂,代理设计模式; 局限性:一个子类只能继承一个抽象类;一个子类可以继承多个接口;如果抽象类和接口都能实现的操作,一般选择接口,因为可以避免单继承局限;

新罗区15739641672: Java中如何区分抽象类和接口? -
闵亮小儿: 含有abstract修饰符的class 即为抽象类,abstract类不能创建实例对象,含有abstract的方法的类必须定义为abstract class ,abstract class 里的方法不必是抽象的,抽象来中定义抽象方法必须放在具体子类中实现,所以呀,不能有抽象的构造方法...

新罗区15739641672: java中为什么要用抽象类和接口 -
闵亮小儿: 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然.今...

新罗区15739641672: java 接口与抽象类 -
闵亮小儿: 类就像一棵树,接口就是树上系的风筝,风筝上又可以再系上其他的风筝,一个风筝又可以被几个绳子系着.接口不能单独加载,JVM中执行的只有类,没有接口.接口的执行只能依附于实现此接口的类.只有类的 实例 才能在JVM堆内存中分配空间.接口中的属性都是public static final的,方法都是public static abstract 的.

新罗区15739641672: java中抽象类跟接口的区别和总结 -
闵亮小儿: 1, 抽象类和接口都代表系统的抽象层; 2, 抽象类和接口都不能被实例化,但都可以继承或者实现抽象类或者接口的具体类,通过定义引用变量来构造; 3, 抽象类和接口都包含抽象方法; 4, 抽象类中可以为部分方法提供默认的实现,可以...

新罗区15739641672: Java中 何时使用抽象类和接口? -
闵亮小儿: 当需求明确某些功能的实现方法时,可用抽象 当需求所有功能都未明确要求实现方法时,用接口. 即,这个类中需要存在变量或已实现方法时,用抽象类.否则用接口.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网