关于面试中abstract 和 interface 的区别

本文通过实验展示了Java接口和抽象类的基本特性,包括接口的变量和方法限制,抽象类的成员和构造方法,以及它们之间的继承关系。

这个在网上找了一些文章看了。说的好多,就决定自己用代码去实验一番。

public interface Demo1 {//接口的实验

    protected String aa = "可以有自己的属性变量";//报错,其实我只能是 public static final
    String bb(){
        System.out.println("不能带有自己的成员方法");//报错
    }
    
    public Demo1(){//报错
        System.out.println("没有自己的构造方法");
    }
    
    abstract void cc();//带上抽象方法

}

总结:1、接口可以带自己的变量和方法,变量必须是public static final(不写也可以,是默认的),方法只能是抽象的。

2、接口不能建构造方法。

==============================================================================================================

public abstract class Demo2 {

    protected String aa ="抽象类可以有自己的属性变量";//默认:friendly
    
    void bb() {
        System.out.println("抽象类可以有自己的成员方法");
    }
    
    abstract void cc();//这个需要去实现。。。
}

===========================================

public abstract class Demo3 extends Demo2{

    //虽然继承了抽象类Demo2,但是因为自己身上也有abstract标志,所以可以不去实现Demo2中的抽象方法。
    
    public Demo3(){
        //可以有构造方法。
    }
    
    abstract void dd();
}

===========================================

public class Demo4 extends Demo3 {

    @Override
    void dd() {
        // 必须要去实现Demo3中的抽象方法    

    }

    @Override
    void cc() {
        // 必须要去实现Demo2中的抽象方法

    }

}

通过抽象类Demo3继承抽象类Demo2,再用Demo4去继承抽象的Demo3。

总结:1、抽象类可以有自己的变量和方法,无限制。变量为friendly类型。

2、可以有构造方法。

从代码层可以知道这两点。

剩下的是需要自己去记的。

1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。接口继承接口,不能实现接口。抽象类继承抽象类,能实现接口。

    2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是public static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。

    3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。

    4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。

    5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

    6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

    7.接口中的方法默认都是 public,abstract 类型的。

方面abstractinterface
数据成员有( friendly)有(public static final)
成员方法只有abstract的成员方法
构造方法
继承抽象类、实体类接口
实现接口

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值