抽象类和接口的关系

Java的基础面试题还是很多会考这个的,所以自己总结下。(JDK8之后)

相同点:

1.抽象类和接口都不能被实例化

2.它们当中都能够包含抽象方法

 

重点是它们的区别:

1、抽象类当中有抽象方法普通方法(有方法体),普通方法可以不被重写;

接口当中的方法包含抽象方法默认(default)方法,同样默认方法也可以不被重写,调用时需要借助接口的实现类的对象来进行调用,并且在JDK8.0之后,接口中也能有静态方法(接口名.方法名调用)。

2、抽象类中有构造器和初始化块,但是接口中没有。

3、接口当中定义的是静态常量,必须用public static final来进行定义,不能定义普通成员,而抽象类当中两者都能进行定义。

抽象类的具体实现

public abstract class TestAbstractCLass {
    //抽象类可以有构造方法和初始化块
    TestAbstractCLass() {

        System.out.println("抽象类的构造器");
    }
    //普通方法
    public void normalMethod() {
        System.out.println("这是一个抽象类的普通方法");
    }
    //普通静态方法
    public static void normalStaticMethod() {
        System.out.println("这是一个抽象类的普通静态方法");
    }

    //抽象方法,只能被public和protected修饰
    abstract void absMethodFromAbstractClass();
}

public class Sontest extends TestAbstractCLass{
  
    Sontest() {
        super();
    }

    @Override
    void absMethodFromAbstractClass() {

    }
    
//抽象类中的普通方法,可选择是否重写
//    @Override
//    public void normalMethod() {
//        super.normalAbs1();
//    }

public static void main(String[] args) {
       //调用抽象类的静态普通方法,直接抽象类.静态方法名即可调用
        TestAbstractCLass.normalStaticMethod();
        //调用抽象类中的普通方法(需要通过子类的对象来进行调用)
        new Sontest().normalMethod();
    }

接口的具体实现

public interface TestInterface {
    //默认方法
    default void defaultMethod() {
        System.out.println("接口中的默认方法");
    }

    //抽象方法(默认为public abstract修饰)
    void absMethodFromAbstractInterface();

    //JDK8后加入的静态方法
    static void staticMethod() {
        System.out.println("接口中的静态方法");
    }
}

public class Sontest implements TestInterface{

    //重写接口中的抽象方法
    @Override
    public void absMethodFromAbstractInterface() {

    }
    
    //接口中的默认方法,可被重写也可不被重写
//    @Override
//    public void defaultMethod() {
//
//    }

public static void main(String[] args) {
   
        //调用接口中的默认方法
        new Sontest().defaultMethod();
        //静态方法的调用
        TestInterface.staticMethod();
    }

}

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值