Java-接口和抽象类
抽象类写法及作用范围
- 随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更通用。
- 类的设计应该保证父类和子类能够共享特征。有时将一个父类设计得非常抽象,以至于它没有具体的实例,这样的类叫做抽象类。
- 用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法。
- 抽象方法:只有方法的声明,没有方法的实现。以分号结束。abstract int abstractMethod1( int a );
- 含有抽象方法的类必须被声明为抽象类。
- 抽象类不能被实例化。抽象类是用来被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体。
- Abstract不能用来修饰属性、构造器、private、static、final。
抽象类的特点:
- 抽象方法所在的类必须是抽象类
- 抽象类不能进行实例化
- 如果要实现一个抽象类,创建一个子类去继承这个抽象类
- 子类继承抽象类以后,必须重写抽象类里面所有的抽象方法(前提子类不是抽象类)
- 抽象类里面可以定义普通方法
- 抽象类可以定义构造方法
抽象方法的特点:只能方法的定义,没有方法体
抽象类和一般类的区别
相同点:
- 抽象类和一般类都是用来描述事物的,都在内部定了成员。
不同点:
- 一般类有足够的信息描述事物;抽象类描述事物的信息有可能不足。
- 一般类中不能定义抽象方法,只能定非抽象方法。抽象类中可定义抽象方法,同时也可以定义非抽象方法。
- 一般类可以被实例化。抽象类不可以被实例化。
注意:不能用abstract修饰属性、私有方法、构造器、静态方法、final的方法
接口写法及作用范围
什么是接口?
- 接口可以理解为对一组方法声明进行的统一命名,但这些于方法没有提供任何实现。也就是说,把一组方法声明放在在一个接口中,然后继承该接口的类都需要实现这些方法。
- 通过接口,你可以对方法进行同一管理,继承接口的类只需实现这些方法就可以了。
- 有时必须从几个类中派生出一个子类,继承它们所有的属性和方法。但是,Java不支持多重继承。有了接口,就可以得到多重继承的效果。
- 接口(interface)是抽象方法和常量值的定义的集合。
- 一个类可以实现多个接口,接口也可以继承其它接口。
接口的作用
- 可以实现不同类的相同行为,不需要考虑类之间的层次关系;
- 可以指明多个类需要实现的方法;
- 可以使处于不同层次甚至互不相关的类具有相同的行为。
- 接口主要用来定义规范。解除耦合关系。
接口的特点:
- 用interface来定义。
- 接口中的所有成员变量都默认是由public static final修饰的。
- 接口中的所有方法都默认是由public abstract修饰的。
- 接口没有构造器。
- 接口采用多继承机制。
- 接口是一种特殊的抽象类,不能被实例化。
定义和实现接口
在java中使用关键字interface来定义接口
interface InterfaceA{ }
使用关键字implements来实现接口
class SubClassimplements InterfaceA{ }
一个类可以实现多个接口
class SubClassextends SuperClassimplements InterfaceA, InterfaceB{ }
接口与接口之间是继承关系,使用extends关键字,而且接口可以多继承
interface InterfaceAextends InterfaceB{ }
抽象类和接口的区别
相同点:
- 接口和抽象类都不能被实例化。只能被其他类实现和继承。
- 接口和抽象类都可以包含抽象方法,实现接口和抽象类的类都必须实现这些抽象方法,否则实现的类就是抽象类。
不同点:
- 抽象类与接口定义不同:抽象类abstract class ,接口interface
- 接口里只能包含抽象方法,不包含已经实现的方法;抽象类则完全可以包含普通的方法。
- 接口里不能定义静态方法;抽象类可以定义静态方法
- 接口里只能定义静态常量属性,不能定义普通属性;抽象类里既可以定义普通属性,也可以定义静态常量
- 接口不包含构造函数;抽象类可以包含构造函数,抽象类里的构造函数并不是用于创建对象,而是让其子类调用这些构造函数来完成属于抽象类的初始化操作。
- 接口不包含初始化块,但抽象类可以包含初始化块
- 一个类最多只能有一个直接父类,包括抽象类;但一个类可以直接实现多个接口,通过实现多个接口可以弥补Java的单继承不足
还没有评论,来说两句吧...