Java基础 第二篇 接口和抽象类的区别 面试常问 (小编曾经吃过在这大亏)

/*
接口:
    接口中可以含有 变量和方法。
    1.接口中的变量会被隐式指定为public static final变量

    2.方法会被隐式指定为public abstract方法且只能是public abstract方法

    并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法但接口支持多继承。

而抽象类:
    在讲抽象类之前,要先讲讲抽象方法,抽象方法是一种特殊的方法:
    它只有声明,而没有具体的实现。
    而当一个类中有了抽象方法,他就是一个抽象类了,
    抽象类必须被abstract修饰。抽象类中有静态代码块和静态方法,也可以有成员变量和方法。但方法必须是被实现的。
*/

package cn.ys.test;



public abstract  class TestFinalAbstract {
    //final与abstract不能同时修饰同一个类
    final  double value =11111;
    static int s =111111;
    static {
        int via=0;
    }
    public static void test() {

    }
    public void test1(String a) {

    }

    abstract void TestFinalAbstract();

    abstract void TestFinalAbstract1();

}

class TestExtendAbstract extends TestFinalAbstract implements TestInterface{

    void TestFinalAbstract() {

    }

    void TestFinalAbstract1() {

    }

    public void Test() {

    }
}


/*而两者的区别可以这么来讲:

        一、从表面上来看:接口比抽象类更加的抽象
                1.接口中不能有方法的实现,静态代码块,
                  而抽象类可以有实现的方法(包括静态方法),静态代码块;

                2.接口的成员变量只能是public static final修饰的,而抽象类不是;

                3.接口支持多继承,java中类以及抽象类都不支持,而类支持多接口实现

        二、设计层面来看
                1.抽象类的是为了描述一个类,也就是一类对象的抽象,
                  而接口是对对象行为的抽象
                  打个比方: 对于老虎,兔子 这两个对象 我们可以建立一个抽象类叫Animals
                            而老虎和兔子都能跑  而跑只是一种特性,定义成为一个类并不合适
                            这时我们可以定义一个接口 RunInterface
                            提供一个run()方法给人调用
                2.从理论上来看,抽象类并没有接口灵活,继承了抽象类的方法的功能拓展有限,
                               因为抽象类不支持多继承。
                   假设有一个抽象类为

*/
abstract  class Man {

    abstract void run();

    abstract void say();

}


/*  当有类继承他之后,我们又想实现 eat()吃饭这个行为;
     这时该怎么办呢?重新设计抽象类吗? 在开发中这样明显效率极低。

    这时接口的好处就体现出来了我们定义一个接口,并进行接口的实现

*/
interface EatInterface{
    void eat();

}

class Son extends Man implements  EatInterface{

    void run() {

    }

    void say() {

    }

    public void eat() {

    }
}

/*
那如果我的功能还要进行拓展呢?
假设我还想实现追求女生这个功能呢?哈哈哈哈
这个时候类支持多实现的好处就出来了

 */
interface   Man1 {
    abstract void run();

    abstract void say();
}

interface PursueGirls{
    abstract void action();
}
class Son1 implements EatInterface, Man1,PursueGirls {

    public void eat() {

    }

    public void run() {

    }

    public void say() {

    }

    public void action() {

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值