黑马程序员技术交流社区
标题:
抽象类和接口的问题
[打印本页]
作者:
冷叙辰
时间:
2013-3-14 11:37
标题:
抽象类和接口的问题
本帖最后由 冷叙辰 于 2013-3-14 18:51 编辑
什么时候用接口什么时候用抽象类?
作者:
李洪因
时间:
2013-3-14 12:29
抽象类和接口的区别:
1.抽象类 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个接口。
2.在抽象类 中可以有自己的数据成员,也可以有非抽象的成员方法,而在i接口中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 接口中一般不定义数据成员),所有的成员方法都是抽象的。
3.抽象类和接口所反映出的设计理念不同。其实抽象类表示的是"is-a"关系,i接口表示的是"like-a"关系。
4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。
7.接口中的方法默认都是 public,abstract 类型的。
抽象类和接口 是 Java语言中的两种定义抽象类的方式,它们之间有很大的相似性。但是对于它们的选择却又往往反映出对于问题领域中的概 念本质的理解、对于设计意图的反映是否正确、合理,因为它们表现了概念间的不同的关系。
作者:
HM张超
时间:
2013-3-14 12:40
根据我自己的理解,看是谁给你提供方法。是jdk的类,还是别人给你写的。根据情况的不同,你调用的时候也有相应的不同。选择一个最优的方式就可以!不用那么较真
作者:
李思杰
时间:
2013-3-14 12:55
abstract class Student
{
abstract void study();//子类一定会做(学习),但学的东西不一样,就用抽象方法
void sleep()//子类一定会做,而且做的都一样,就用一般方法
{
System.out.println("sleep");
}
}
interface Smoking//有些子类做(抽烟)有些不做(抽烟),用接口
{
void smoke();
}
class ZhangSan extends Student implements Smoking//zhangsan抽烟就用接口实现
{
void Study(){}
public void smoke(){}
}
class LiSi extends Student //LiSi不抽烟就不用接口
{
void Study(){}
}
class InterfaceTest
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
复制代码
总结来说:子类都会做,而且做的事实一样的就用一般方法
子类都会做,但做的事不一样就用抽象方法
子类有些做,有些不做就用借口
作者:
王龙涛
时间:
2013-3-14 17:01
毕老师视频讲到过,我整理在这里,希望对你有用、
抽象类:
当多个类中出现相同功能,但是功能主体不同,这时的可以进行向上抽取的,只抽取功能和定义,而不抽取功能主体。
抽象类特点:
1.抽象方法一定在抽象类中
2.抽象方法和抽象类必须被abstract关键字修饰
3.抽象类不可以用new创建对象,因为调用抽象方法没意义
4.抽象类中的方法要被使用,必须由子类复写所有方法后建立子类对象调用。如果子类只覆盖了部分抽象方法,那么子类还是一个抽象类。
如果描述一个事物时有不确定的部分,也是事物的功能,需要明确出现,但是无法定义主体,通过抽象方法来表示。
例如://每个班级的学生都有学习的功能但是学习的方法不一样,要创建子类对象然后 复写study方法。
abstract class Student
{
abstract void study();
}
接口:
初期理解是一个特殊的抽象类
当抽象类中的方法都是抽象的,那么该类就是通过接口形式来表示。
接口中的成员都是Public的
接口是不可以创建对象的因为有抽象方法。全部覆盖后,子类才可以实例化,否则子类是一个抽象类
接口可以被多实现。
java存在多继承,只有一在接口和接口之间。
java在类中只有单继承,多继承通过实现来完成。
个人总结
继承是is a,子类是父类的一种。
实现是 like a用接口更容易提高功能的扩展。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2