JAVA接口与抽象类的区别

JAVA接口与抽象类的区别

  • 什么是抽象方法?

  • 什么是抽象类?

  • 什么是接口?

  • 接口和抽象类的区别?

  • 接口和抽象类的相同点?

 
 
1.什么是抽象方法?
在java中,我们都知道方法的概念,那么什么是抽象方法呢,抽象方法就是只有方法名,而没有方法体(没有方法的具体实现的方法),称为抽象方法.
 
抽象方法的特点:
抽象方法只有方法名,而没有方法体(方法最后以分号结尾)
 
抽象方法的优点:
每一个不同的类,可以通过重写抽象方法而实现不同的功能,实现多态.
 
2.什么是抽象类?
含有抽象方法的类称为抽象类.
 
注意:
抽象类中可以有非抽象方法和属性,抽象类也是一个类,所以也只能单一继承.
 
public abstract class Door {
       private String name;
       private int id;
       public abstract void open();
       abstract void close();
       public void welcome() {
             System.out.println("欢迎来到Bug研发工作站");
       }
}
在上图中方法后以分号结尾(没有方法体),上图中open,close是抽象方法,welcome是普通方法(有方法体);
 
public class WaterDoor extends Door{
       public void open() {
             System.out.println("防水门开了");
       }
       void close() {
             System.out.println("防水门关了");
       }
}

子类(非抽象类)继承抽象类,必须重写抽象类中的所有抽象方法(非抽象方法不用重写)
抽象类继承抽象类不用重写方法<因为抽象类中可以有抽象方法,而非抽象类中不能有抽象方法>
public class Test {
       public static void main(String[] args) {
             WaterDoor water = new WaterDoor();
             water.open();
             water.close();
             water.welcome();
       }
}
上图为Test类运行结果
 
注意:
  • 抽象类中不一定都是抽象方法,但是含有抽象方法的类一定是抽象类.
  • 构造方法,不能为抽象方法
3.什么是接口?
接口在java中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明,不可以创建对象(无法被实例化),但是一个类可以实现多个接口,接口也是多态的实现的一种.
 
接口与类的相似点:
  • 一个接口可以有多个方法
  • 接口文件保存在.java结尾的文件中,文件名使用接口名
  • 接口的字节码文件保存在.class结尾文件中
  • 接口相应的字节码文件必须与包名称相匹配的目录结构中.
 

接口与类的区别:

  • 接口不能用于实例化对象。
  • 接口没有构造方法。
  • 接口中所有的方法必须是抽象方法。
  • 接口不能包含成员变量,除了 static 和 final 变量。
  • 接口不是被类继承了,而是要被类实现。
 
接口中的常量:
接口中的常量必须使用public static final修饰,不写也默认为public static final
(在接口中不可以有变量)
 
接口中的方法:
接口中的方法必须使用,public abstract修饰,不写默认为abstract
 public interface PoorGuy {
       public static final int num = 10 ;
       String name = "Bug研发工程师";
       public abstract void welcome();
       void Poor();
}

  

 
上图定义了一个接口,接口中num常量是使用public static final修饰的,name没有使用,但是默认修饰也是public static final修饰,方法中welcome方法使用的是public abstract修饰的,但是Poor()没有使用,接口中的方法默认修饰为public abstract
 
 
上图中会报错,原因是接口中默认使用public abstract,但是实现接口的类不写默认的是default,public-->default,降低了访问权限,所以要使用public就可以了
public class TestInterface implements PoorGuy{
       public void welcome() {
             System.out.println("欢迎来到Bug研发工作室");
       }
       public void Poor() {
             System.out.println("我很贫穷");
       }
}
后面的具体测试没有写,大家可以自己测试.
 
4.接口和抽象类的区别?
 
 
接口
抽象类
构造方法
没有
方法(不写限定符)
默认为public abstract
默认为default
普通方法
没有
继承与实现
可以多实现
只可以单一实现
变量
没有变量(除非public static final修饰)
有变量
重写
所有方法都需重写
普通方法不需重写
静态代码块
不包含
可以有
5.接口和抽象类的相同点?
 
继承抽象类的子类,或者实现接口的子类(抽象类除外),都必须实现接口或抽象类中的抽象方法,抽象类可以不用重写接口或抽象类中的方法.
 
接口和抽象类都能实例化对象
 
菜鸟总结,大佬勿喷
 
 
posted @ 2018-11-08 21:31  Bug研发工程师  阅读(210)  评论(0编辑  收藏  举报