/* 接口: 接口中可以含有 变量和方法。 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() { } }
Java基础 第二篇 接口和抽象类的区别 面试常问 (小编曾经吃过在这大亏)
猜你喜欢
转载自blog.csdn.net/qq_38983577/article/details/81630257
今日推荐
周排行