抽象类和接口精华

抽象类相关

抽象类:又叫抽象基类:在定义的时候使用 abstract 关键字标记的普通类。他可包含一般类所包含的所具有的特性,例如字段,属性,方法,另外还包含一个很特殊的方法,叫抽象方法(没有实现的方法,而派生于该类的类就必须实现该方法),而且不能被实例化,主要用在类的定义和部分实现等方面。

接下来我们先看下抽象类和抽象方法在使用需要注意的地方:

1,抽象类需要用abstract关键字标记

2,抽象方法不能有任何的方法实现(连{}都不能有)

3,抽象成员必须包含在(隶属于)抽象类中。

4,由于抽象成员没有任何实现,所以子类必须将抽象成员重写。

5.抽象类不能实例化,所以抽象类的存在就是为了让子类继承。

6,抽象类中既可以包括抽象成员,也可以包括具有代码实现的成员。,

7,抽象方法不能用static修饰。

看过了抽象类和抽象方法后,我们接着来看下与接口相关的内容

接口相关:

接口:接口是一种特殊的抽象类,用interface关键字来标记接口类型,它可以包含实例/静态方法,任何实现该接口的类就必须按照接口的定义实现这些方法。

下面我们来看下使用接口要注意哪些地方:

1,         接口是一种规范,为了实现多态而存在

2,         接口不能被实例化

3,         接口中的成员不能加“访问修饰符”,接口中的成员访问修饰符为public,不能修改(默认为public)

4,         接口中的成员不能有任何实现(“光说不做”,只是定义了一组未实现的成员)

5,         接口中只能有方法、属性、所引器和事件,不能有“字段”

6,         接口与接口之间可以继承,并且可以多继承

7,         实现接口的子类必须实现该接口的全部成员。

8,         一个类可以同时继承一个类并实现多个接口,如果一个类同时继承了父类A,并且实现了接口IA,那么语法上A必须写在IA的前面。Class  Test:A,IA{},因为类是单继承的。

9,         当一个抽象类实现接口的时候,如果不想把接口中的成员实现,可以把该成员实现为abstract

10,      显示实现接口,只能通过接口变量来调用(因为显示实现接口后成员为private)

看过了抽象类和接口各自的特点后,下面我们就来看下抽象类和接口的区别:

第一:接口定义类的公共行为,抽象类定义类的公共实现

第二:一个类只能继承自一个类(抽象类),但是可以同时实现多个接口

第三:接口中不能有实现,抽象类中既可以有未实现的成员,也可以有实现的成员

第四:接口中未实现的方法必须在子类中实现,抽象类中未实现的成员必须在子类中重写

第五:好的接口定义应该是具有专一功能性的,而不是多功能的,否则会造成接口污染。如果一个类只是实现了这个接口中的一个功能,而不得不去实现接口中的其他方法,就叫接口污染。

看过了抽象类和接口的区别后,我们接着来看下抽象类和接口的应用场合。

什么时候使用抽象类,什么时候使用接口?

首先我们强调下:抽象类主要用于关系密切的对象;而且接口适合为不相关的类提供通用功能。

例如:飞机会飞,鸟也会飞,他们都继承了同一个接口”飞”;但是“波音747”属于飞机抽象类,大雁属于鸟抽象类。

或者是如下比喻:

就像铁门木门都是门(抽象类),你想要个门我给不了(不能实例化),但我可以给你个具体的铁门或木门(多态);而且只能是门,你不能说它是窗(单继承);一个门可以有锁(接口)也可以有门铃(多实现)。 门(抽象类)定义了你是什么,接口(锁)规定了你能做什么(一个接口最好只能做一件事,你不能要求锁也能发出声音吧(接口污染))。

最后用一张简单的表格对两者进行一个对比:

时间: 2024-10-27 04:56:14

抽象类和接口精华的相关文章

抽象类与接口的见解(精华篇)

什么是抽象类: 1.声明方法的存在而不去实现它的类被叫做抽象类. 2.抽象类不能被实例化. 3.抽象类中可以有非抽象方法. 4.抽象类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类. 继承抽象类:子类必须实现抽象类的所有方法,子类不实现那么子类也必须是抽象类. 继承普通类:共享父类的方法,经常要用到的一些方法写成一个公共类继承就能调用. 使用抽象类好处:假设要编写一个计算矩形.三角形和圆的面积与周长的程序. 可以看到三个类都要计算面积和周长,虽然公式不同但目标相同. 因此可以定义一

7.C#知识点:抽象类和接口浅谈

知识点目录==========>传送门 首先介绍什么是抽象类? 抽象类用关键字abstract修饰的类就是叫抽象类,抽象类天生的作用就是被继承的,所以不能实例化,只能被继承.而且 abstract 关键字不能和sealed一起使用,因为sealed是不允许继承,这样就是抽象类的意义冲突了. public abstract class Test { } 现在我们知道知道了抽象类长的什么样了,下面要知道抽象类是干嘛用的.顾名思义把对象共有的东西抽象出来.比如猫和和狗鸟等都有眼睛,都有嘴巴.那我们就可

2.35 Java基础总结①抽象②接口③设计抽象类和接口的原则④接口和抽象类的区别

java基础总结①抽象②接口③设计抽象类和接口的原则④接口和抽象类的区别 一.抽象 abstract作用:不能产生对象,充当父类,强制子类正确实现重写方法和类相比仅有的改变是不能产生对象,其他的都有,包括构造.属性等等任何一个类只要有一个抽象的方法就成了抽象类 抽象方法 public abstract A();①方法是抽象的,这个类也是抽象的:②子类必须重写抽象方法,除非子类也是抽象类 抽象类可以没有抽象方法,但一般不这么设计 二.接口 interface 接口也是Java的一种引用数据类型(J

抽象类和接口的区别

含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象.含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的.abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法.如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型. 接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须

Java抽象类与接口的区别

很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题.本文我们将仔细讨论这些话题. 在讨论它们之间的不同点之前,我们先看看抽象类.接口各自的特性. 抽象类 抽象类是用来捕捉子类的通用特性的 .它不能被实例化,只能被用作子类的超类.抽象类是被用来创建继承层级里子类的模板.以JDK中的GenericServlet为例: public abstract class GenericServlet implements Servlet, ServletC

【翻译】JAVA中抽象类和接口的区别

不知道有没有人翻译过了,这篇是挺简单的,权当复习一遍内容吧. 很多常见的面试问题如"抽象类和接口有什么区别","你在什么时候用抽象类什么时候用接口".所以在这篇文章里面,我们会讨论一下这个话题. 在开始讨论它们的区别之前,我们先看看它们的介绍. Abstract class 抽象类 抽象类被用来抽象出子类的共同特征.它是不能被实例化的,它只能被子类继承作为超类使用.抽象类被用作它的子类下的层次结构创建模板(Abstract classes are used to c

Java重载、覆写、this、super、抽象类、接口

第一.重载和覆写 1) 重载:方法名相同,参数类型和个数不同,典型的是构造方法的重载  覆写:方法名.参数类型.返回值类型全部相同,典型的是接口的实现: 2)重载对权限没有要求:覆写要求  被覆写的方法不能拥有更严格的权限: 3)重载发生再一个类中:覆写发生在继承类中. 第二.this和super 1)this访问本类中的属性(方法),如果本类中没有此属性(方法),则从父类中 继续寻找:super询问父类中的属性(方法): 2)调用本类构造,必须放在构造方法的首行:调用父类构造,必须放在子类构造

关于抽象类和接口

抽象类:含有abstract修饰符的类即为抽象类,它是不能创建实例对象的,含有abstract的方法必须定义在抽象类中,但抽象类中的方法不一定必须是抽象的,抽象类中的抽象方法再其子类中必须被实现,所以不能有抽象的静态方法(静态方法是不能被继承的). 接口:是一个特殊的抽象类,接口中定义的方法都必须是抽象的,接口中的方法都是public abstract类型,接口中的成员变量默认为public abstract final类型. 语法区别:① 抽象类中可以拥有普通的成员变量,接口中没有. ②抽象类

抽象类与接口

接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 一.抽象类 我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的.如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类.比如new Animal