接口与抽象类的比较

抽象类

抽象类的特点
  1. 抽象类和抽象方法必需由关键字abstract修饰
  2. 抽象类不能实例化
  3. 抽象类不一定是会有抽象方法但有抽象方法的一定是抽象类
  4. 抽象类的成员变量:有常量,有变量
  5. 成员方法:有抽象的,有非抽象的
  6. 抽象类虽然不能实例化但它有构造方法,构造方法是为了用于子类访问父类数据的初始化j。抽象类的构造方法和普通类的构造方法一样
    都是用来初始化类
    只是抽象类的构造方法不能直接调用 因为抽象类不能实现实例
    但是一旦一个普通类继承了抽象类 便也可以在构造函数中调用其抽象类的构造函数
    也可以使用其方法
    可以这么理解吧 抽象类就是一个不能实例化的不同类
    不过如果方法加了abstract那么就必须在子类里面重写了

抽象类的案例

abstract class Animal {
     // 抽象方法,必须是空
      public abstract void eat();  
      public Animal(){}
   } 
   // 子类也是抽象类
 abstract class Dog extends Animal {}
   // 子类是具体类,重写抽象方法
  class Cat extends Animal { 
            public void eat() {
             System.out.println("猫吃鱼");
            }
      }

接口

接口的特点
  1. 必须被interface修饰
  2. 接口是实现不是继承用implement关键字
  3. 接口不能实例化
  4. 接口没有构造方法
  5. 接口的成员变量只能是常量默认修饰符:public static final;
  6. 成员方法只能是抽象的
  7. 实现类可以是抽象类亦可以是具体类
接口实例

interface Animal{	
 //吃功能	
 public abstract void eat();
     //睡功能 
 public abstract void sleep();

}
class dog implements Animal{
//重写抽象方法
      public abstract void eat(){
       System.out.println("dog  eat");
     }
    public abstract void sleep(){
      System.out.println("dog  sleep");
    }
}

两者比较

相同点
  1. 都不能被实例化
  2. 都有抽象方法
  3. 具体类都必须重写抽象方法
不同点
  1. 接口没有构造方法而抽象类有
  2. 接口(implements)是实现抽象类是继承(extend)
  3. 抽象类中可以有非抽象放法而接口的成员方法中只有抽象方法
  4. 接口的成员变量只能是常量,而抽象类可以是常量也可以是变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值