java中继承抽象类和继承普通类有什么区别? abstract class和interface有什么区别

2024-11-01 07:47:38
推荐回答(1个)
回答1:

首先我们都知道 抽象类是一种特殊的接口,那就要知道java为什么定义接口,其实说白了,就是为了定义一种规范,让大家都必须去实现这个接口。而抽象类呢,我里面可以有抽象方法,也可以有普通方法,就是说抽象类里的方法可以 被子类部分实现,只用实现抽象的方法。而你继承普通类,可以完全不用去实现父类的任何一个方法。 总的来说就是:接口必须全部实现,抽象类只实现抽象方法,继承类可以不实现。 抽象类不能被实例化,只能被继承象类的作用是普通类无法替代的,抽象类的作用主要是提供一种模版,比如我现在要写一个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(),让具体类型的人具体实现,所以抽象类就起到extends 是继承某个类 继承之后可以使用父类的方法 也可以重写父类的方法 implements 是实现多个接口 接口的方法一般为空的 必须重写才能使用 abstract class和interface有什么区别 ? 前者是抽象类,后者是接口。 抽象类和接口都可以被继承,不同的是,接口内的方法不能实现,需要继承的类来具体实现其方法,而抽象类中的方法可以被具体实现,并且继承的类可以重写其方法。一个类可以继承一个抽象类,但是可以继承多个接口。通常,接口被运用于实现比较常用的功能,便于日后维护或者添加删除方法,而抽象类更倾向于充当公共类的角色。不适于在日后重新对里面的代码进行修改。 回答者: z屁小妞 | 三级 | 2009-3-21 22:44
class 是普通类 abstract 是抽象类 包含纯虚函数(C++里)的类 interface 是接口 让普通类可以继承他派生出有一定相同点的不同类 范围作用一般是: interface > abstract abstract > class 比如: 你创建一个 图形 的接口 interface 然后创建了2个abstract 抽象类, 圆形和三角型 你由于需要,实现了圆形的普通类: 正圆 和椭圆 抽象类 接口不能创建对象 只有让派生类继承他们来创建对象 回答者: pujia12345 | 八级 | 2009-3-21 22:45
关于抽象类和接口的区别网上有一大堆,能了解很多,下面是我曾总结的关键地方,希望对你有帮助 接口缺点:如果向一个java接口加入一个新的方法时,所有实现这个接口的类都得编写具体的实现。 接口优点:一个类可以实现多个接口,接口可以让这个类不仅具有主类型的行为,而且具有其他的次要行为,比如 HashMap主要类型是Map,而Cloneable接口使它具有一个次要类型,这个类型说明它可以安全的克隆. 抽象类的缺点:一个类只能由一个超类继承,所以抽象类作为类型定义工具的效能大打折扣。 抽象类的优点:具体类可从抽象类自动得到这些方法的缺省实现。 抽象类与接口的区别-- 1、抽象类可以包含部分方法的实现,这是抽象类优于接口的一个主要地方。 2、由于Java的单继承,每个类只能从一个抽象类继承,但是每个类可以实现多个接口,使用接口还可以实现Mixin混合类型的类。接口可以继承多个接口,即接口间可以多重继承。 3、将类抽取出通用部分作为接口容易,要作为抽象类则不太方便,因为这个类有可能已经继承自另一个类。 4、可以将接口和抽象类一起使用。在集合框架体系中,顶层接口Collection定义了一些方法,同时又提供了几个抽象类 AbstractCollection、AbstractList、AbstractMap实现了一些方法,这样具体的集合实现类可以选择从抽象类中继承或直接实现接口。 补充: 1、包含一个或多个抽象方法的类本身必须被声明为抽象的; 2、除了抽象方法外,抽象类还可以包含具体数据和具体方法; 如: abstract class Person{ private String name; public Person(String n){ name = n; } public abstract String getDescription();//注意:没有{} public String getName(){ return name; } } 回答者: rokily | 四级 | 2009-3-21 22:48
前者是抽象类,后者是接口.抽象类可以被继承(extends),不可有实例,继成的类可以重写其方法,抽象类中的抽象方法必须重写。一个类可以继承一个抽象类,但是可以继承多个接口。通常,接口被运用于实现比较常用的功能,便于日后维护或者添加删除方法,而抽象类更倾向于充当公共类的角色。接口类的方法只写个函数申明,不实现。