黑马程序员技术交流社区

标题: 普通类,抽象类和接口的区别 [打印本页]

作者: 影响力147753321    时间: 2013-4-22 09:17
标题: 普通类,抽象类和接口的区别
要详细 的说明。它们是怎么用的。关系是怎么样的。
作者: 孤独的鸟人    时间: 2013-4-22 09:51
当你定义的类要用到接口的时候:class 类名 implements  接口名。
抽象类:   
1.抽象方法,只有行为的概念,没有具体的行为实现。abstract 关键字修饰,并且没有方法体。   
2.包含抽象方法的类,就一定是抽象类。 abstract 关键字修饰,包含抽象方法。            
3.抽象类不能直接创建实例。可以定义引用变量。           
4.抽象类只能被继承,一个具体类继承一个抽象类,必须实现所有抽象方法。            
5. 抽象方法和抽象类非常适合作为系统的分析和设计的工具。
接口:
1. 接口:全部的方法都是抽象方法,全部的属性都是常量。接口用来表示纯抽象概念,没有任何具体的方法和属性。  
2. 不能实例化,可以定义变量。  
3.接口变量可以引用具体实现类的实例。
4. 接口只能被实现(继承),一个具体类实现接口,必须使用全部的抽象方法。  
5. 接口之间可以继承。  
6. 一个具体类可以实现多个接口,实现多继承现象.
7. 接口中的属性,默认是常量 public static final   
8. 接口中的方法一定是:public abstract   
9. 实现一个接口,使用关键字implements, 实现实际上是一种继承关系。接口和实现类是父子类型的关系JAVA 里面接口(interface)也是一个类,但是接口是一个特殊的类,在定义接口类的时候,在他的接口体当中,只能定义方法,说的明白一些,就是不能写方法体。但是当你调用这个接口的时候就需要在你的类当中,加入接口中的方法,并且在方法中写出方法体。
作者: 刚金波    时间: 2013-4-22 10:20
一般类就是平常使用的没有abstract和interface修饰符修饰的类,类中的方法一般而言都有具体的方法体。
而当你不确定类中方法的具体的实现时,可以不写具体的方法体,可以用修饰符abstract来修饰方法,这时的方法就是抽象的,而抽象的方法只能放在抽象类中,所以这个类也必须是抽象的。那就提出了另一问题,抽象类中必须都是抽象方法吗,答案是不是,抽象类中可以有抽象的方法,也可以有具体实现了的方法,抽象类中甚至可以没有抽象的方法。抽象类是不能实例化对象的,只能被继承,由子类实例化对象。
而当一个抽象类中全是抽象方法的时候,可以把抽象类的abstract修饰符改成interface修饰符,也就是接口。我理解的就是接口是一种特殊的抽象类。接口的实现是通过关键字implements实现的,一个类可以同时实现多个接口。
不知道这样对你有帮助没,有什么疑问咱可以再讨论
作者: 海不扬波    时间: 2013-4-22 10:43
抽象类的作用是普通类无法替代的,抽象类的作用主要是提供一种模版,比如我现在要写一个Person类.首先要是普通类我可能会这么写:
public class Person{
String age;
int age;
public void doJob(){
System.out.println("i have a job");
}
}
这里Person类有名字,年龄属性,还有一个介绍职业的方法,假如现在要写一个学生类,学生也是人要继承Person我们写:
Class Stndents{
public void doJob()
System.out.println("我们是学生");
}
}
同理有一个教师类
public class Teachers{
public void doJob(){
System.out.println("我们是教师");
}
}
现在再来看下Person.里面的doJob方法有意义吗?i havea job这句话一点用处没有,所以可以将doJob写成dojob(),让具体类型的人具体实现,所以抽象类就起到了近一步抽象的作用,些Person类的时候我根本不需关心职业的问题我Person只提供一个抽象的模板.

接口和抽象类的概念又不一样。接口是对动作的抽象,抽象类是对根源的抽象。抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。
人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.
所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。
第一点. 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
第二点. 接口可以继承,抽象类不行
第三点. 接口定义方法,不能实现,而抽象类可以实现部分方法。
第四点. 接口中基本数据类型为static 而抽类象不是的。
当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。

接口可以实现也可以继承,抽象类不行
抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的
所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。






作者: 易杰    时间: 2013-4-22 10:49
有abstract修饰符的class即为抽象类,abstract类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象类中的所有抽象方法,那么子类也必须定义为abstract类型。 接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final

下面比较一下两者的语法区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型
,虽然eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即public
abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。
作者: 影响力147753321    时间: 2013-4-22 19:04
刚金波 发表于 2013-4-22 10:20
一般类就是平常使用的没有abstract和interface修饰符修饰的类,类中的方法一般而言都有具体的方法体。
而当 ...

解释的不错。赞一个!
作者: 黄玉昆    时间: 2013-4-22 21:42
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
作者: 陈湘林    时间: 2013-4-22 22:59
抽象类和接口的关系
区别点        抽象类        接口
定义        包含抽象方法的类        包含全局变量和抽象方法
组成        构造方法,抽象方法,普通方法
常量,变量        常量,抽象方法
使用        子类继承父类        子类实现父类
关系        抽象类可以实现接口        接口不能继承抽象类,接口可以继承接口
局限        单继承        没有限制
实际        多为模板来用        多为标准来用
选择        为了代码复用        为了实现多态





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2