导读:
1、什么是抽象类(abstract)?
2、如何定义抽象类(abstract)?
3、抽象类(abstract)的作用?
4、何为接口?接口和类的区别?
5、怎么区分抽象类和接口?
1、抽象类的定义:
Java中声明一个类时,可以不给出该类的所有实现细节。然后再定义一个或者多个子类继承抽象父类,重用
父类中的代码、扩充并实现其未实现的功能。2、定义抽象方法的规则:
(1)只给出方法的头部(包括方法名、形式参数列表、返回值类型及修饰符),而不给出方法体。
(2)抽象方法必须使用abstract关键字修饰,且包含抽象方法的类也必须声明为抽象类。
注:a、不包含抽象方法的类也可以声明为抽象类。
b、抽象类不能被实例化,即不允许创建抽象类的对象。如下例中不能new Animal(),否则会报错。
c、子类必须实现其父类中的所有抽象方法否则该子类只能声明为抽象类。
d、父类不是抽象类,但是子类中可以添加抽象方法,此时子类必须声明为抽象类,因此也不允许实例化。
e、抽象类中可以声明static属性和方法。
3、抽象类的作用:
(1)代码重用:子类可以重用抽象父类中的属性和非抽象方法;
(2)规划:子类中通过抽象方法的重写来实现父类中规划的功能。
public abstract class Animal {
private int age ;
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
public abstract void sleep();
}
public class Person extends Animal{
private String name;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void sleep(){
System.out.println("人可以睡觉。");
}
}
public class Cat extends Animal{
public void sleep(){
System.out.println("猫也可以睡觉。");
}
public void catchMouse(){
System.out.println("猫还可以抓老鼠。");
}
}
public class Test{
public static void main (String[] args){
Animal a = new Person();
a.setAge(18);
a.sleep();
}
}
程序运行输出结果为:
人可以睡觉。
4、接口:
可以理解为是一种极端的抽象类。该类中只有常量和抽象方法的定义,而不提供变量和方法的实现。
4.1、接口和类的区别:
接口中定义的属性必须是public abstract的,而接口中的方法则必须也是public abstract。
接口可以被多个类实现,而且必须实现接口中的所有抽象方法,否则只能声明为抽象类。
接口可以多重实现,即一个接口可以同时实现多个接口。
接口也可以多重继承,实现多态机制。
5、抽象类和接口的异同点:
同:都是不断向上抽象而来。
异:(1)抽象类需要被继承,而且只能单继承;
接口需要被实现,而且可以多实现。
(2)抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法;
接口中只能定义抽象方法,必须由子类去实现。