Java抽象类与接口详解

一、抽象类
1定义:包含抽象方法的类
2特征:用abstract修饰,位置在类前和方法前
3意义:为了继承(extends)
4实现:通过继承实现——extends+抽象类名
5举例:
(public) abstract class MyClass{
(public) abstract void run() ;
}//抽象类

public class MyClass2{
private int age;
public int getAge(){
return age;
}
}//普通类

6总结抽象类和普通类的区别:
1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,失去抽象类的意义)。
  2)抽象类 不能直接创建对象(必须先继承,再由子类创建对象)。
  3)抽象类的子类必须实现父类的抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类)。






注意:
抽象类中可以有零个或多个抽象方法,也可以包含非抽象的方法;
抽象类中可以没有抽象方法,但是,有抽象方法的类必须是抽象类;
在抽象类派生的非抽象子类中必须实现抽象类中定义的所有抽象方法;
父类是非抽象类(即具体类),则其子类仍可是抽象类;
abstract 类中不能有private的数据成员或成员方法;
类在实现方法时,必须显式地使用public修饰符,否则编译系统警告为缩小了接口中定义的方法的访问控制范围

二、接口(比抽象类更抽象)
定义:一种规范,标准
特征:
interface关键字
接口中的变量会被隐式地指定为public static final变量且只能是public static final变量 可省略 大于等于0个
接口中的方法会被隐式地指定为public abstract方法且只能是public abstract方法 可省略 大于等于0个
接口就是 抽象方法 声明和 常量值 的集合。
意义:
实现:用implements+接口1,接口2...
举例:
(public) interface MyInterface(){

}
interface IShape{
final double pi=3.14;
abstract double getArea();
abstract double getLength();
}
接口与抽象类的区别:
1.语法层面上的区别
  1)抽象类中可以有具体的方法,而接口中只能存在public abstract 方法;
  2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
  3)抽象类可以含有静态代码块以及静态方法,而接口不可以;
  4)一个类只能继承一个抽象类,却可以同时实现多个接口。
5)抽象类中的抽象方法必须用abstract修饰;接口中可以省略abstract修饰符。
6)抽象类可以有构造方法,而接口不能有构造方法。
7)抽象类中的抽象方法访问类型可以是public、protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认为public abstract类型。
2.设计层面上的区别
  1)抽象类是 的抽象,而接口是 行为 的抽象。抽象类是对整个 类整体 进行抽象,包括属性、行为,但是接口却是对类 局部(行为) 进行抽象。

  2)设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。





理解:一般情况下,普通类的 属性 都是 私有 的, 方法 大多是 公有 的。外界只能过个这些公有方法来访问类。这是Java封装性的体现。如果一个类没有公有属性, 也没有公有方法,这个类就是无法使用的类了。所以我们需要为一个类提供对外 接口
接口只定义“做什么”,而不定义“怎么做”。 接口说明了“做什么”,而实现这个接口的类,也就是实现类需要说明“怎么做”。
接口可以把“做什么”和“怎么做”分离开来。这给Java带来了很多好处。虽然代码量增加了,可我们的程序的可维护性加强了。
我们希望电脑可维护性很强,例如CPU坏了,只需要有接口,换一个CPU即可,但是对于笔记本,尤其是超极本,不 2016/11/09 11:22

猜你喜欢

转载自blog.csdn.net/qq_34419607/article/details/53097803