抽象类与接口的区别

抽象类与接口的区别

1.了解访问控制修饰符
  • 仅对本类可见 —— private
  • 对本包可见 —— 默认的(default),不需要修饰符
  • 对本包及子孙类可见 —— protected
  • 对外部类都可见 —— public
修饰符本类本包子孙类(本包)子孙类(其他包)其他包
privateYNNNN
default(不需要写)YYYNN
protectedYYYYN
publicYYYYY
2.抽象类

抽象类由关键字abstract class修饰,如下:

public abstract class Test{
    private String s;	//实例变量
    
    public Test(String s){	//带参构造器
        this.s = s;
    }
    
    public String getS(){	//getter方法
        return s;
    }
    
    public abstract void abstractMethod();	//抽象方法
}

实际上,抽象类除了不能实例化对象之外,其他用法和普通类差不多,但是需要注意:

1. 抽象方法不能被声明成静态类型

2. 含有抽象方法的类必定是抽象类;

3. 抽象类的子类必须要实现父类的抽象方法,否则该子类也必须是抽象类;

4. 由于子类必须实现父类的抽象方法才能实例化,所以抽象方法也不能被final、private修饰。

3.接口

接口由关键字interface修饰。示例:

interface InterfaceName{
    int MAX_INTEGER = 1000;	//常量
    
    int addMAX_INTEGER(int t);	//抽象方法   
}

接口像是抽象方法的集合,但不需要abstract修饰,需要注意:

1. 类使用implements实现一个接口后才能实现接口中的抽象方法;

  • public class Test implements InterfaceName{ //实现
        @Override
        public int addMAX_INTEGER(int t) {
            return MAX_INTEGER + t;
        }
    }
    

2. 接口不是类!所以不能有构造器,不能使用new来实例化实例化一个接口,但可以声明接口;

3. 接口中所有的方法都是自动赋 public abstract ,故不需要写访问修饰符;但Java 8新增可以使用default关键字修饰的非抽象方法、可以增加静态方法,Java 9中方法可以使用private修饰;

4. 接口中的字段总是自动赋 public static final,绝不会有实例字段。

5. 可以使用 instanceof 检查一个对象是否实现了某个特定接口。

4.抽象类和接口的异同
  • 实现类通过implement实现接口,类通过extends继承抽象类;

  • 类只能继承一个抽象类,但可以实现多个接口;

    public class Test extends Abstract implements A,B,C{...}
    
  • 如果抽象类和接口中的方法发生冲突了,超类优先,接口方法屏蔽;

    public class Realization extends A implements B{
        @Override
        public String cry() {	//这是抽象类A中cry方法
            return null;
        }
    }
    

抽象类与接口的使用我经常会出错,笔记错误请各位大佬多多指正,欢迎评论区留言,不胜感激!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值