接口和抽象类的异同点(Java8)

相同点

  • 接口和抽象类都是为了将方法进行抽象,让子类去实现,所以都可以定义抽象方法
  • 抽象类和接口都不能实例化,需要子类去实例化

不同点

  • 接口使用implements关键字,抽象类使用extends关键字
  • 抽象类可以实现接口,接口只能继承接口,接口不能继承类,一个类只能有一个父类,但能有多个接口
  • 子类实现接口后,只能做重写方法
  • 接口不能有构造器,只能定义public static final 修饰的静态常量
  • 子类继承抽象类后,将父类的成员属性,成员方法也继承过来了
  • 抽象类可以有构造器,可以限定子类的构造行为

//接口A
public interface A {
    public int Away(int a);
}
//接口B
public interface B {
    public int Bway();
}
//子类实现接口A,B
public class test implements A,B {
    @Override
    public int Away(int a) {
        int b = a*a;
        return b;
    }
    @Override
    public int Bway() {
        System.out.println("无参方法");
        return 0;
    }
    //测试:子类实例化
    public static void main(String[] args) {
        test test = new test();
        System.out.println(test.Away(5));
        test.Bway();
    }
}

接口能干什么

//抽象类
public abstract class aa {
    //抽象类构造器
    public aa(String string) {
        this.string = string;
    }
    //成员变量
    public String string;
    //抽象方法,需要子类实现 
    public abstract int add(int b);
    //抽象方法
    public int abstrackWay(int a){
        return a*10;
    }
}
//子类
public class Exe extends aa {
    @Override
    public int add(int b) {
        return b+10;
    }
    //继承抽象类构造器
    public Exe(String string) {
        super(string);
    }
}
//测试,子类实例化
   public static void main(String[] args) {
        Exe exe = new Exe("jmh");   //通过抽象类构造器对实例化对象赋值
        exe.abstrackWay(10);        //抽象类方法
        exe.add(20);                //子类实现抽象类的方法
        exe.string;                 //抽象类的成员属性
    }

抽象类能干什么

可以看出接口就是更加纯粹的抽象类,接口只能定义子类去实现方法,更规范

default关键字

出现原因:Java8在原有接口中添加了许多新的方法,如果在继承该接口的子类中不去实现该方法,那么就会报错,为了保证向下兼容,被default关键字抽象的方法就不是抽象方法了,也就不会强制要求已有的子类去实现方法,但是子类可以去重写default修饰的方法

public interface A {
    public int Away(int a);
    default void defaultWay(){
        System.out.println("默认方法");
    }
}

什么时候用抽象类,什么时候用接口

需要让子类继承成员变量,需要控制子类的实例化,用抽象类

否则,用接口

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值