抽象类:
存在抽象方法的类;
没有足够信息描绘一个具体对象的类;
抽象类与普通类相区别 在于:不能实例化 (存在抽象方法,无法指定具体对象)
同样由于不能实例化 所以 :抽象类必须被继承才能使用
接口:
由抽象方法和静态成员变量组成 或者说 接口主题是抽象方法的集合
或许还带有一些前缀为 public static final 的静态成员变量
(JDK1.8中,接口可以写方法的具体实现,但是必须加上default修饰 default 返回类型 方法名
(如:default void test()) 另外,接口的默认方法除了可以声明为default之外,还可以
声明为static,此时,调用默认方法时,则需要用类名.方法名来调用,和调用静态方法的方式是一样的。)
使用上的区别:
一个类可以实现多个接口,但是只能继承一个类
注意事项(扩展):
当一个类实现多个接口时:
对应多个接口里面不能含有不同返回类型的重名方法
如:
实现类无论是实现A还是B或者两个都实现,都会报错->如:
有人说可以通过内部类来实现,我尝试之后发现实现方式只能如下图->
确实这样是可以实现两个接口的异返回类型的重名方法了,但这种样式的一个类实现多个接口的形式,与我所预想的差的有点小远…
综上:
当实现的接口有重名方法,且重名方法返回类型不同时,至少是不能存在直接implements A,B 形式的实现的(当然不排除我写漏了东西,有兴趣可以自己尝试一下)
另外:
为什么只能继承一个类,在这点上也相似:
假设继承多个父类,而父类中存在重名的方法,并且子类未重写该方法,那么在调用的时候就会出现不知道具体应该执行哪个父类的对应方法名方法的情况(被继承的父类中的方法可能是有具体实现的,区别于接口的抽象方法)
类似的,当父类存在同名的成员变量时,也无法辨别使用哪个父类的成员变量 此外还有一些其他原因,因为没有搞清楚…所以就不瞎说了
ps:全文内容仅为个人学习得出的结论,正确性没有保证哦 如果发现什么错误或者持不同意见的 欢迎指正或一起交流一下意见