A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 影响力147753321 高级黑马   /  2013-4-22 09:17  /  3908 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

要详细 的说明。它们是怎么用的。关系是怎么样的。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

7 个回复

倒序浏览
当你定义的类要用到接口的时候: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)也是一个类,但是接口是一个特殊的类,在定义接口类的时候,在他的接口体当中,只能定义方法,说的明白一些,就是不能写方法体。但是当你调用这个接口的时候就需要在你的类当中,加入接口中的方法,并且在方法中写出方法体。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
一般类就是平常使用的没有abstract和interface修饰符修饰的类,类中的方法一般而言都有具体的方法体。
而当你不确定类中方法的具体的实现时,可以不写具体的方法体,可以用修饰符abstract来修饰方法,这时的方法就是抽象的,而抽象的方法只能放在抽象类中,所以这个类也必须是抽象的。那就提出了另一问题,抽象类中必须都是抽象方法吗,答案是不是,抽象类中可以有抽象的方法,也可以有具体实现了的方法,抽象类中甚至可以没有抽象的方法。抽象类是不能实例化对象的,只能被继承,由子类实例化对象。
而当一个抽象类中全是抽象方法的时候,可以把抽象类的abstract修饰符改成interface修饰符,也就是接口。我理解的就是接口是一种特殊的抽象类。接口的实现是通过关键字implements实现的,一个类可以同时实现多个接口。
不知道这样对你有帮助没,有什么疑问咱可以再讨论

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
抽象类的作用是普通类无法替代的,抽象类的作用主要是提供一种模版,比如我现在要写一个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 而抽类象不是的。
当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。

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





评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
有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. 一个类可以实现多个接口,但只能继承一个抽象类。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
刚金波 发表于 2013-4-22 10:20
一般类就是平常使用的没有abstract和interface修饰符修饰的类,类中的方法一般而言都有具体的方法体。
而当 ...

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

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马