抽象类
1理解抽象类的作用
在编写一个类时,往往会为该类定义一些方法,这些方法用来描述该类的行为,那么这些方法都有具体的方法体。但是在某些情况下,某个父类只知道其子类应该包含怎样的方法,但是无法准确的知道这些子类如何具体实现这些方法,例如定义一个Shape(图形)类,这个类中有一个计算轴承的方法getL(),但是不同的Shape子类对周长的计算方式不一样,即Shape类无法准确知道其子类计算周长的方法。
可能有人会提出,既然Shape不知道如何实现getL()方法,那么就干脆不管它。这样不好.最好的解决方案可以使用抽象类。
通过继承可以从原有的类派生出新的类,原有的类称为父类或基类,而新的类称为子类或派生类。通过继承机制,派生出来的子类不仅可以得到父类的属性和方法,还可以定义自己的属性和方法。
Java中有一种特殊的类,专门用来作为父类,这种类被称为“抽象类”。抽象类想模板一样,其目的是要设计者根据他的格式来修改并创建新的类。但是抽象类自己不能创建对象,只能通过抽象类派生出来的子类创建对象。
2掌握抽象类的特点
◆包含抽象方法的类一定是抽象类.
◆抽象方法和抽象类都用关键字abstract修饰
◆构造方法,static方法都不能定义为抽象方法。
◆抽象方法不能使用private访问控制符修饰。
◆抽象方法只需要声明,不需要实现。
◆抽象类中可以定义构造方法,但是抽象类不能创建对象。
◆子类继承抽象类时,需要重写抽象类中所有的抽象方法,除非子类也是抽象类。
3掌握抽象类的语法
◆语法:
[访问控制符]abstract class 类名{
0—n个属性;
[修饰符] 返回值类型 方法名([参数列表]){
方法体;
[return返回值;]
}
[修饰符] abstract 返回值类型方法名([参数列表]);
}
◆案例:
4掌握抽象类的使用
案例一:继承抽象类
案例二:多重继承
说明:B类继承了A类,但是B没有重写A类中的抽象方法,因为B本身也是抽象类
C类继承B类时,需要重写2个抽象方法。
综合案例:
接口(更彻底的抽象类)
1理解接口的概念
抽象类是从多个类中抽象出来的模板,如果将这种模板进行的更彻底,则可以提出一种更加特殊的“抽象类”-----接口(interface). 接口中没有普通方法,接口中所有方法都是抽象方法。
接口就是一组对类的要求,它反映了一组没有内在联系、不相关的类之间的通讯的协议。
2掌握接口的特点
◆一个类只能继承一个直接的父类,但是一个类可以实现多个接口。(多继承)
◆接口中不能定义构造方法,接口不能实例化。
◆接口中方法全部都是抽象方法,接口中属性全部都是全局常量
◆当一个类实现(继承)某个接口时,他必须实现接口中所有的方法,除非这个类定义为抽象类。
3掌握接口的语法
◆语法:
[修饰符]interface 接口名{
全局常量;
抽象方法;
}
◆案例:
public interface A{
int a = 5; //相当于 public static final int a = 5;
void fun1(); //相当于 public abstract void fun1();
}
说明:接口中所有属性默认为全局常量,所有方法默认为抽象方法
所有定义接口是,如果缺省了public、static、final、abstract关键字,系统会自动加上。
4掌握接口的使用
interface(接口)-----class(类)
implements(实现)----extends(继承)
案例一:接口实现
案例二:
案例三:特殊情况说明
//实现多个接口,接口中用,隔开即可。
C like A和B
public class C implements A,B{
}
//同时有继承和实现接口时,继承在前,实现接口在后面。
public class C extends B implements X,Y{
}
//接口继承接口 注意,此时需要用extends,而且此时可以多继承。
public interface B extends A{
}
public interface C extends A,B{
}