Java基础面试题一:请说说抽象类和接口的区别?
2017-08-29 08:40
330 查看
1.抽象类实例
2.接口的实例
3.语法上的区别
抽象类中可以包含非抽象的普通方法,而接口中所有的方法必须是抽象的,不能有非抽象的普通方法。
一个类可以实现多个接口,但只能继承一个抽象类。
抽象类里可以有构造方法,而接口内不能有构造方法。
抽象类中的抽象方法的访问类型可以是public,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
抽象类中可以包含静态方法,接口内不能包含静态方法。
抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认为public static final类型。
抽象类中可以有普通成员变量,而接口中不能有普通成员变量。
4.应用上的区别
接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。
人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.
所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。
1). 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
2). 接口可以多继承,抽象类不行
3). 接口定义方法,不能实现,而抽象类可以实现部分方法。
4). 接口中基本数据类型为static,而抽类象不是的。
当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。
抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的
所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。
abstract class person{ public String name; // 可以有普通成员变量 public static String sex; //可以有静态成员变量 public static void eat(); //可以有静态方法 public abstract void run(); // 抽象类中的抽象方法的访问类型可以是public ,protected和默认类型,但是一定不能是private(abstract 的 methods 就是让子类implement(实现)具体细节的,怎么可以用 private 把 abstract method 封锁起来呢? (同理,abstract method 前不能加 final)。) }
2.接口的实例
interface class playable{ Date date; // 接口中不能有普通成员变量。默认为public static final类型,所以可以省略不写 public static final Stringsize; //接口中定义的变量只能是public static final类型,并且默认为public static final类型。 void drink(); // 接口中的抽象方法只能是public类型的,并且默认即为public abstract类型,所以可以省略不写 public abstract void play(); 接口中的抽象方法只能是public类型的,接口内不能包含静态方法。 }
3.语法上的区别
抽象类中可以包含非抽象的普通方法,而接口中所有的方法必须是抽象的,不能有非抽象的普通方法。
一个类可以实现多个接口,但只能继承一个抽象类。
抽象类里可以有构造方法,而接口内不能有构造方法。
抽象类中的抽象方法的访问类型可以是public,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
抽象类中可以包含静态方法,接口内不能包含静态方法。
抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认为public static final类型。
抽象类中可以有普通成员变量,而接口中不能有普通成员变量。
4.应用上的区别
接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。
人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.
所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。
1). 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
2). 接口可以多继承,抽象类不行
3). 接口定义方法,不能实现,而抽象类可以实现部分方法。
4). 接口中基本数据类型为static,而抽类象不是的。
当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。
抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的
所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。
相关文章推荐
- JAVA基础--接口的概念、分类及与抽象类的区别
- 巩固下java基础,接口与抽象类的区别
- 黑马程序员——Java基础--接口和抽象类的区别
- 2.35 Java基础总结①抽象②接口③设计抽象类和接口的原则④接口和抽象类的区别
- 黑马程序员——Java基础---抽象类和接口的区别
- 关于Java中抽象类和接口的区别(阿里巴巴的电话面试题)
- java基础之接口与抽象类的区别
- 【java基础 16】抽象类和接口的区别
- [Java基础] 抽象类和接口的区别
- 详细解析抽象类和接口的区别-Java基础-Java-编程开发
- java基础之接口(抽象类与接口的区别)
- JAVA基础(1) -- 抽象类与接口的区别
- java基础-抽象类与接口的区别
- Java中抽象类与接口的区别 | Java基础
- java基础知识—JAVA中抽象类和接口的区别
- java 基础----抽象类与接口的区别,知道区别才能准备的应用
- 【java基础 16】抽象类和接口的区别
- 【Java基础 011】 抽象类和接口的区别
- java基础抽象类和接口区别
- [好程序员训练营]java基础之抽象类和接口的区别小结