抽象类以及接口的异同

/**
* 抽象类的使用
* @author Administrator
*定义抽象类的目的是有时候我们需要一个很抽象的概念比如水果,只是想要使用它来分类,所以它的实例化是没有意义的
*oneabstract a=new oneabstract()是不合法的,编译错误
*/

public  abstract  class oneabstract {
//可以有构造方法
    public oneabstract() {
 
    }
    //可以有变量
    public int aa;
public abstract void a();
public void ab(){
 
}
}
//我们可以定义一个类继承oneabstract来获得里面的方法,如果这个类不是抽象的则必须重写抽象方法
class b extends oneabstract{
 
    @Override
    public void a() {
        // TODO Auto-generated method stub
 
    }
 
}
 

public interface oneintface {
 
    /*不能有构造方法
     * public oneabstract(){
 
    }*/

 
    public int aa=1;
//public    String a;
public abstract void a();
public void b();
/**
里面不能放private以及protected类型,因为接口的使用是要实现的,而private以及protected修饰的方法
* 只能在当前类和当前包使用
*/

//protected void c();
/*同上,abstract不能和final放一起*/
 
/*abstract 不能和static放一起因为static的作用是为了
* 让所有的对象共享方法或者属性而实现接口后所有的方法都被重写了
* 不再需要共享
public abstract static void c(); */

 
}
//接口可以继承接口
interface two extends oneintface{
 
 
}
//接口之间可以多继承
interface three extends two,oneintface{   
    public void threea();
}
//普通的类实现接口必须重写其中的抽象方法
class c implements three{
 
    @Override
    public void a() {
        // TODO Auto-generated method stub
 
    }
 
    @Override
    public void b() {
        // TODO Auto-generated method stub
 
    }
 
    @Override
    public void threea() {
        // TODO Auto-generated method stub
 
    }
 
}
//抽象类实现接口可以不重写
abstract class d implements three{
 
}
原文地址:https://www.cnblogs.com/foreverstudent/p/3308850.html