一.抽象类
1.定义
抽象类指提供方法,但是未提供方法体(实现方法)的类,抽象类用来被子类继承,子类通过方法的重写实现抽象方法。
注:1)抽象类中不一定包含抽象类,它可能只是abstract修饰的类;包含抽象方法的类一定是抽象类。
2)抽象类一旦被继承,子类需要实现所有的抽象方法,否则子类也要用abstract修饰.
3)抽象类不能实例化,但是可以在创建抽象类的同时,提供抽象方法的实现。
4)抽象类可以拥有自己的成员变量及成员方法。
2.格式
抽象类:[public] + abstract +类名
抽象方法:[public] /protected +类型+方法名称();
注:abstract不能修饰私有方法,静态方法和构造方法。
3.理解
在面向对象的过程中,类可以描述对象,但是有些类并不提供具体的方法(足够的信息)来描述具体的对象。比如有对象new Animal(),对象是什么动物,怎么叫,什么样子,我们并不知道,需要在子类(Cat,Dog)中提供具体的数据。总的来说,抽象类是对事物的抽象。
4.实例
public abstract class Animal { int i=0; //如果为静态变量则直接调用,非静态变量创建对象(实例化的同时要重写抽象方法)后调用。 abstract void shout(); //构造抽象方法 } public class Cat extends Animal{ public void shout() { //子类重写抽抽象方法 System.out.println("猫叫:喵喵..."); } public static void main(String[] args) { Animal a1 = new Cat(); //抽象类在实例化的时候,引用指向子类,子类不是抽象类;不会报错;如果子类在上面不重写抽象方法,这里将会报错,即子类为抽象类。 a1.shout(); a1.i=2; Animal a2 = new Animal(){ //抽象类实例化的同时重写抽象方法。 void shout() { System.out.println("喵"); } }; a2.shout(); a2.i=3; } }
二.接口
1.定义
接口可以说是一种更加彻底的抽象类,它是对行为特性进行抽象,它只有常量和抽象方法。
2.格式
2.1创建接口
interface + 接口名称{
常量:[public static final]+ 类型 + 常量名称=?; (需要给常量初始化)
抽象方法:[public abstract] + 方法名称();
}
2.2接口的使用
子类 + implements + 接口名称1,2,3..{}
注:一个子类可使用多个接口。
3.实例
以飞机为例,所有的飞机都有起飞,着陆功能:
1 abstract class Plane{ 2 abstract void launch(); 3 abstract void land(); 4 } 5 //或者 6 interface Plane{ 7 void launch(); 8 void land(); 9 }
然而一些飞机(战斗机Battleplane)具有开火(fire)功能,实现方法如下:
1.在抽象类Plane中添加开火功能:abstract void fire();或者在接口Plane中添加开火功能:void fire();
2.新建一个抽象类Fire并添加开火功能
1 abstract class Fire{ 2 abstract void fire(); 3 4 }
3.新建一个接口Fire冰添加开火功能
1 interface Fire{ 2 void fire(); 3 4 }
筛选:1.子类battleplane可以继承该抽象类或者实现该接口,但是其他子类(客机之类)不适用,舍弃;2.子类Battleplane不能同时继承两个父类,舍弃;3.子类Battleplane继承父类Plane,并且实现接口Fire,其他子类(客机之类的)可以继承该抽像类,没有开火功能,则不实现该接口。
具体代码如下:
1 public class Battleplane extends Plane implenments Fire{ 2 3 public void launch(){ 4 System.out.println("起飞“); 5 } 6 7 public void land(){ 8 System.out.println("着陆”); 9 } 10 11 public void fire(){ 12 System.out.println("开火“); 13 } 14 15 public static void main(String args[]){ 16 Battleplane bp=new Battleplane(); 17 bp.launch(); 18 bp.land(); 19 bp.fire(); 20 } 21 }
!!!