很多同学不知道抽象类和接口究竟有什么作用。认真学完本节课,再做点练习(课后的案例和作业),即可了解抽象类和接口的美妙之处。
概要:
1.1 使用抽象类
1.1.1 抽象方法和抽象类
1.1.2 抽象类不可以实例化
1.1.3 继承抽象类
1.1.4 抽象类的意义
1.2 使用接口
1.2.1 定义接口
1.2.2 实现接口
1.2.3 接口的继承
博主点评
1.1 使用抽象类
1.1.1 抽象方法和抽象类
· 由abstract修饰的方法为抽象方法,抽象方法只有方法的定义,没有方法体实现,用一个分号结尾;
· 一个类中如果包含抽象方法,该类应该用abstract关键字声明为抽象类;
· 如果一个类继承了抽象类,必须重写其抽象方法(除非该类也声明为抽象类)。
abstract class Shape{
private double c;
public Shape(double c){
this.c=c;
}
public abstract double area();
}
1.1.2 抽象类不可以实例化
· 抽象类不可以实例化,例如,如果Shape是抽象类的话,下面的代码是错误的:
Shape s1=new Shape();
· 即使一个类中没有抽象方法,也可以将其定义为抽象类,同样,该类不可以实例化。
· abstract和final关键字不可以同时用于修饰一个类,因为final关键字使得类不可继承,而abstract修饰的类如果不可以继承将没有任何意义。
1.1.3 继承抽象类
· 一个类继承抽象类后,必须重写其抽象方法,不同的子类可以有不同的实现。
1.1.4 抽象类的意义
· 抽象类的意义在于:
- 为其子类提供一个公共的类型;
- 封装子类中的重复内容(成员变量和方法);
- 定义有抽象方法,子类虽然有不同的实现,但该方法的定义是一致的。
1.2 使用接口
1.2.1 定义一个接口
· 接口可以看成是特殊的抽象类。即只包含有抽象方法的抽象类;
1.2.2 实现接口
· 与继承不同,一个类可以实现多个接口,实现的接口之间用逗号分隔。当然,该类需要实现这些接口中定义的所有方法;
· 一个类可以通过implements关键字"实现"接口。一个类实现了某个接口后必须实现该接口中定义的所有方法。
class AmericanCurl implements Runner,...{
public void run(){
System.out.println("run...");
}
}
实现接口(续1)
· 接口可以作为一种类型声明的变量,一个接口类型的变量可以引用实现了该接口的类的对象;通过该变量可以调用该接口中定义的方法(具体的实现类提供了方法的实现)。
Runner runner=new AmericanCurl();
1.2.3 接口的继承
· 接口间可以存在继承关系,一个接口可以通过extends关键字继承另外一个接口。子接口继承了父接口中定义的所有方法。
博主点评:
抽象类和接口可以为子类封装公共的部分。比如动物都会跑,但是各自的速度不同,这样就可以定义一个抽象父类,里面有run方法,子类具体去实现,比如猫的run方法跑的慢,猎豹的run方法跑得快。
扫描关注我吧: