1.概述:
抽象类:
Java语言中,用abstract 关键字来修饰一个类时,这个类叫作抽象类。抽象类是它的所有子类的公共属性的集合,是包含一个或多个抽象方法的类。抽象类可以看作是对类的进一步抽象。在面向对象领域,抽象类主要用来进行类型隐藏。
抽象方法:
在抽象类中可以包含一般方法和抽象方法。抽象方法的定义与一般方法不同,抽象方法在方法头后直接跟分号,而一般方法含有以大括号框住的方法体。所有的抽象方法必须存在于抽象类中。
在抽象类中定义的方法称为抽象方法,这些方法只有方法头的声明,而用一个分号来代替方法体的定义,即只定义成员方法的接口形式,而没有具体操作。只有派生类对抽象成员方法的重定义才能真正实现与该派生类相关的操作。在各子类继承了父类的抽象方法之后,再分别用不同的语句和方法体来重新定义它,形成若干个名字相同、返回值相同、参数列表相同、目的一致但是具体实现有一定差别的方法。抽象类中定义抽象方法的目的是实现一个接口,即所有的子类对外都呈现一个相同名字的方法
2.定义方法:
用关键字abstract修饰的类称为abstract类(抽象类),例如:
abstract class L{
.....
}
用关键字abstract修饰的方法称为abstract(抽象方法),例如:
abstract int max(int x, int y);
3.使用注意事项:
1、抽象类中可以有零个或多个抽象方法,也可以包含非抽象的方法。·抽象类中可以没有抽象方法,但是,有抽象方法的类必须是抽象类。
2、对于抽象方法来说,在抽象类中只指定其方法名及其类型,而不书写其实现代码。
3、抽象类可以派生子类,在抽象类派生的子类中必须实现抽象类中定义的所有抽象方法。
4、抽象类不能创建对象,创建对象的工作由抽象类派生的子类来实现。
5、如果父类中已有同名的abstract方法,则子类中就不能再有同名的抽象方法。
6、abstract不能与final并列修饰同一个类。
7、abstract 不能与private、static、final或native并列修饰同一个方法。
4.如何去理解抽象类(abstract类):
抽象类的语法与使用固然简单,但要真正理解抽象类的意义就相对难些:
(1)抽象类可以抽象出重要的行为标准,该行为标准用抽象方法来表示,即抽象类封装了子类必须要有的行为标准
(2)抽象类声明的对象可以成为其子类的上转型对象,调用子类重写的方法,即体现子类根据抽像类中的标准给出的具体行为。
示例:
一个男孩要找一个朋友,他提出一些行为标准,例如朋友具有speak()和run()这里两种行为,
但是可以不给出具体细节(说中文还是英语,跑得快还是慢)。使用抽象类封装具体行为,并让子类去完成行为标准
package porject;
public abstract class Friend {
abstract void speak();
abstract void run(); //两个行为标准
}
class ChinaFriend extends Friend{
void speak(){
System.out.println("你好");
}
void run(){
System.out.println("跑得快");
}
}
class AmericanFriend extends Friend{
void speak(){
System.out.println("hello");
}
void run(){
System.out.println("run fast");
}
}
package porject;
public class Boy {
Friend friend;
void setFriend(Friend f){
friend = f;
}
void showFriend(){
friend.speak();
friend.run();
}
}
package porject;
public class Demo1 {
public static void main(String[] args) {
Friend S = new ChinaFriend(); // S为上转型对象
Boy boy = new Boy();
boy.setFriend(S);
boy.showFriend();
S = new AmericanFriend(); //S为上转型对象
boy.setFriend(S);
boy.showFriend();
}
}
结果如图