长沙市同升湖山庄d区:接口与具体实现(Java)

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/09 10:35:33
《Thinking In Java》中有这样一段话:

接口不仅仅只是一种形式更纯粹的抽象类,它的目标比这要高。因为接口是根本没有任何具体实现的----也就是说,没有任何与接口相关的存储----因此,也就无法阻止多个接口的组合。这一点是很有价值的,因为你有时需要去表示“一个x是一个a、一个b以及一个c”。在C++中,组合多个类的接口的行为被称作“多重继承(multiple inheritance)。”它可能会使你背负很棘手的包袱,因为每个类都有一个具体实现。在Java中,你可以执行相同的行为,但是只有一个类可以有具体实现,因此,通过组合多个接口,在C++中看到的问题是不会在Java中发生的:
......

我不是很理解“具体实现”的含义,是指实例化具体对象吗?

如果是这样的话,“接口是根本没有任何具体实现的”这句话我能够理解。
但是,他说“每个类都有一个具体实现”我就不是很理解了,抽象类也有一个具体实现吗?

还有一个问题,他说“没有任何与接口相关的存储”,是指接口永远不会被载入内存吗?如果接口内有常量呢?抽象类又是如何呢?

具体实现是在类实现接口的时候由类来实现的,接口中只是包含方法的定义,在类中要把需要实现的接口的所有方法都实现。
如:
interface IMyInterface
{
void func();//在接口中只是声明,没有实现,也就是没有代码
}
在类中要有这样的方法:
void func()
{
//DoSomething 这个就是具体实现
}

抽象类就是用来做基类的,他的派生类实现抽象类的方法,这个和接口类似,但是抽象类只能单继承,而接口可以多继承。

接口只是声明的东西,实际并不分配内存,当在类中实现了接口定义的方法后才真正编译,占用内存。

举个更形象地例子
human.java
packet human;
interface human{
public void eat();
}
oneperson.java
import human.human
class onehuman implements human
{
public void eat()
{
int i=1;
}
}
其中onehuman类的eat方法就是接口中eat的具体实现