哪位高手能给小弟我解释下JAVA中的抽象类和接口

谁能给我解释下JAVA中的抽象类和接口。
谁能给我解释下JAVA中的抽象类和接口。 为什么要用抽象类和接口 ,实在是 搞不明白。 百度了 多少次还是搞不明白,比如:
现在有一个门 , 他 具有open()和close() 两个功能。 
百度的资料 是 定义一个抽象类 然后继承。  
abstract class Door{ 

abstract void open(); 

abstract void close(); 

… 

} 

然后 继承 
class Door1 exends Door {
   
void open(){}
void close(){}
}

 正如 上面的, 我不用抽象类同样可以实现 呀。 为什么要用 呢。 还有接口, 说是 可以实现 多继承, 但是 接口里面什么都没做呢。 谁给解释下 一直没明白。 本人 搞php开发的, 面向对象 就 这两个让我感到 很是郁闷。

------解决方案--------------------
在java中有许多的类跟接口可以实现同样的功能,有些人就感觉这个多此一举。但是认真想想,java为了安全的考虑只支持单继承,但是我们的实际开发中,可能需要同时继承两个类,但是java又是不允许。这里接口就发挥作用了,我们可以继承一个类,同时实现一个或多个接口(对于接口实现的个数java中没有限制)
另外像楼主说的接口有时候就像标准,别人可以使用这个标准。对于抽象类也可以算是一个标准,但是用的更多的是用抽象类去实现多态
------解决方案--------------------
我是这样理解的,一个door的抽象类,就像是定义了一个门的概念,但是具体是什么样的门,需要再细说。
然后就有一个门去继承门这个概念,有的门是推拉的,有的门是旋转的,你就需要实现这个open()和close()来确定到底是什么方式开关的。
还有就是你的门有新的功能,你就可以在继承了门的概念之后加上自己的功能。
总之这个抽象类就是定义一个共有的特性,就像你说的门有开和关的功能。
还有你说可以直接写类,当然这个门好说,就开和关,假如不是门,是个汽车呢,不同的汽车有相同的基本功能,也有不同的扩展功能,你不能每写一辆车就把所有基本功能也写一遍吧。继承可以减少大量的代码数量,你不同的车继承了车的基本概念后就只需要写他新的功能就行了。
------解决方案--------------------
通俗点说 哈
比如说 有个座充 
它可以充 诺基亚 可以充索爱 只要电池的型号一样
而你自己带的可能只可以给自己的手机充电。
那么这个 座充就可以看做是接口 它可以插不同的电池 只要规定一定的规格
。它不考虑你是哪个品牌的手机。
或者说 拿电脑的驱动来说。当你换了一个新的硬件 你就必须装驱动
每个硬件的 驱动都不一样 但是操作系统都可以操作他们 这样他们也是实现了接口