学习内容:抽象类和接口
1. 抽象类(半抽象)
什么是抽象类?类和类之间有共同特征,将这些共同特征提取出来,就形成了抽象类。
1、抽象类属于引用数据类型。其定义的语法是:
[修饰符列表] abstract class 类名{
类体;
}
2、抽象类半抽象的,是无法实例化的,无法创建对象的,使用抽象类是用来被子类继承的。
3、final
和abstract
不能联合使用,这两个关键字是对立的。
4、抽象类的子类可以是抽象类。
5、抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的。
6、抽象类关联到一个概念:抽象方法。什么是抽象方法呢?**抽象方法表示没有实现的方法,没有方法体的方法。例:public abstract void dosome();
抽象方法的特点:(1)没有方法体,以分号结尾。 (2)前面修饰符列表中有abstract
关键字。
7、抽象类中不一定有抽象方法,抽象方法必须出现在抽象类中
8、一个非抽象类继承抽象类,必须将抽象类中的抽象方法重写(实现)。
例:
public class Test01 {
public static void main(String[] args) {
//注:因为Animal是抽象类,所以不能new对象。
Animal animal=new Cat();//多态,父类型引用指向子类型对象,
animal.dosome();
animal.remove();
}
}
abstract class Animal{
public Animal() {}//无参构造是给子类创建对象用的
public abstract void dosome();//静态方法
public void remove(){
System.out.println("Animal在移动");
}
}
abstract class Bird extends Animal{//抽象类Bird继承抽象类Animal
}
class Cat extends Animal{//非抽象类Cat继承抽象类Animal
public class Cat(){
//这里默认会有一个super();用来调用父类的构造方法
}
public void dosome(){//重写抽象类中的抽象方法
System.out.println("猫在睡懒觉!");
}
public void remove(){
System.out.println("猫在走猫步");
}
}
2. 接口(完全抽象)
1、接口也是一种引用数据类型。
2、接口是完全抽象的。或者也可以说接口是特殊的抽象类
3、接口的定义语法:
[修饰符列表] interface 接口名{
}
4、接口支持多继承,一个接口可以继承多个接口。
5、接口中只包含两部分内容:常量和抽象方法。
6、接口中所有的元素都是public
修饰的(公开的)。
7、接口中的抽象方法定义时:public abstract
修饰符可以省略。
8、接口中的方法都是抽象方法,所以接口中的方法不能有方法体。
9、接口中的常量的public static final
可以省略。
10、类和类(接口和接口)之间叫做继承extends
,类和接口之间叫做实现implements
。(仍然可以将实现看成继承)
11、一个类可以实现多个接口。一个非抽象的类,实现接口的时候,必须将接口中所有方法加以实现。
12、当extends
和implements
同时出现时,extends
在前,implements
在后。
13、使用接口写代码的时候,可以使用多态(父类型引用指向子类型对象)。
例:
public class Test01 {
public static void main(String[] args) {
Clothes c=new Cat();//多态
c.chibang();
c.wear();
c.take();
if(c instanceof Cat){//判断引用c是否是一个Cat对象
Cat b=(Cat) c;//向下转型
b.dosome();
}
}
}
interface Fly{
void chibang();//抽象方法前的public abstract被省略
}
interface Arms{
void take();//抽象方法前的public abstract被省略
}
interface Clothes extends Fly,Arms{//接口之间的多继承
void wear();//抽象方法前的public abstract被省略
}
class Animal{
public void dosome(){
System.out.println("Animal在忙");
}
}
class Cat extends Animal implements Clothes{//非抽象Cat同时继承类和接口
@Override
public void chibang() {//非抽象类Cat重写Fly接口中的抽象方法
System.out.println("猫插上了翅膀");
}
@Override
public void take() {//非抽象类Cat重写Arms接口中的抽象方法
System.out.println("猫拿起了武器");
}
@Override
public void wear() {//非抽象类Cat重写Clothes接口中的抽象方法
System.out.println("猫穿上了盔甲");
}
@Override
public void dosome() {
System.out.println("猫在打小怪兽");
}
}