Java中的两种抽象定义:一为抽象类(Abstract Class),二为接口(Interface)。java
抽象类是关键字abstract修饰的类,既为抽象类,抽象抽象即不能被实例化。而不能被实例化就无用处,因此抽象类只能做为基类(父类),即被继承的类。抽象类中能够包含抽象方法也能够不包含,但具备抽象方法的类必定是抽象类。编程
抽象类的使用原则以下:编程语言
好比: ide
1 package com.fzz.test; 2 3 //抽象类A 4 abstract class A{ 5 public void fun(){//普通方法 6 System.out.println("存在方法体的方法"); 7 } 8 9 public abstract void print();//抽象方法,没有方法体,有abstract关键字作修饰 10 11 } 12 //单继承特性 13 class B extends A{//B类是抽象类的子类,是一个普通类 14 @Override 15 public void print() {//强制要求重写 16 System.out.println("Why is more important than what!"); 17 } 18 19 } 20 //测试类 21 public class TestDemo { 22 public static void main(String[] args) { 23 A a = new B();//多态:向上转型 24 a.fun();//被子类所覆写的过的方法 25 } 26 }
详细可参考:https://blog.csdn.net/wei_zhi/article/details/52736350测试
在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口一般以interface来声明。一个类经过继承接口的方式,从而来继承接口的抽象方法。spa
当类实现接口的时候,类要实现接口中全部的方法。不然,类必须声明为抽象的类。类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。.net
Java中类不容许多继承但接口能够。code
1 // 文件名: Sports.java 2 public interface Sports 3 { 4 public void setHomeTeam(String name); 5 public void setVisitingTeam(String name); 6 } 7 8 // 文件名: Football.java 9 public interface Football extends Sports 10 { 11 public void homeTeamScored(int points); 12 public void visitingTeamScored(int points); 13 public void endOfQuarter(int quarter); 14 } 15 16 // 文件名: Hockey.java 17 public interface Hockey extends Sports 18 { 19 public void homeGoalScored(); 20 public void visitingGoalScored(); 21 public void endOfPeriod(int period); 22 public void overtimePeriod(int ot); 23 }
abstract class和interface是支持抽象类定义的两种机制。正是因为这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具备很大的类似性,甚至能够相互替换,所以不少开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意。具体看下表:对象