首先我们都知道 抽象类是一种特殊的接口,那就要知道java为什么定义接口,其实说白了,就是为了定义一种规范,让大家都必须去实现这个接口。而抽象类呢,我里面可以有抽象方法,也可以有普通方法,就是说抽象类里的方法可以
被子类部分实现,只用实现抽象的方法。而你继承普通类,可以完全不用去实现父类的任何一个方法。
总的来说就是:接口必须全部实现,抽象类只实现抽象方法,继承类可以不实现。
抽象类的作用是普通类无法替代的,抽象类的作用主要是提供一种模版,比如我现在要写一个Person类.首先要是普通类我可能会这么写:public class Person{String age;int age;public void doJob(){System.out.println("i have a job")}}这里Person类有名字,年龄属性,还有一个介绍职业的方法,假如现在要写一个学生类,学生也是人要继承Person我们写Class Stndents{public void doJob{System.out.println("我们是学生")}},同理有一个教师类public class Teachers{public void doJob(System.out.println("我们是教师")){}},现在再来看下Person.里面的doJob方法有意义吗?i havea job这句话一点用处没有,所以可以将doJob写成dojob(),让具体类型的人具体实现,所以抽象类就起到了近一步抽象的作用,些Person类的时候我根本不需关心职业的问题我Person只提供一个抽象的模板
用abstract修饰的类称为抽象类,所谓抽象类是指不能直接实例化对象的类。如果一个抽象类被说明了,则这个类中将包含一个或几个抽象方法。所谓抽象方法是指该方法只有方法说明却没有方法体,即没有具体的代码。抽象类本身不具备实际功能,它只能用于衍生子类。抽象类中不一定包含抽象方法,但一旦某个类中说明了抽象方法,该类必须说明为抽象类。
例题:
//定义由抽象类CShape而派生出的子类CCircle
class CCircle extends CShape //定义子类
{
double radius; //域成员
public CCircle(double r) //构造方法
{
radius=r;
}
public double area( )
{
return 3.14*radius*radius
}
}
// appl4_3,定义由抽象类CShape而派生出的子类CCircle
class CCircle extends CShape //定义子类
{
double radius; //域成员
public CCircle(double r) //构造方法
{
radius=r;
}
public double area( )
{
return 3.14*radius*radius;
}
}
public class appl4_3
{static double t;
public static void main(String args[])
{ String s="red!";
CCircle c=new CCircle(5);
appl4_3 x=new appl4_3( );
c.setColor(s);
x.t=c.area();
System.out.println(“area=”+t+ “color=”+c.color);
}
}
抽象类与普通类的最重要的区别是从面向对象的角度来出发进行解释的,抽象类描述的是非具体的东西,比如说形状,这就是非具体的,形状分为三角形,正方形。圆形等等,普通类就更具体了,三角形就就可以作为一个普通类来对待的。
如果单从语法上来考虑东西,很多问题是想不明白的,建议童鞋多从java编程的核心思想上来考虑,而不只是单纯的考虑一些语法解释上的东西!
抽象类体现的的就是一种模板模式的设计。抽象类是从多个具体类中抽象出来的父类。从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为其子类的模板,从而避免了子类设计的随意性。
如果编写一个抽象父类,父类提供了多个子类的通用方法,并把一个或多个抽象方法留给其子类实现,这就是一种模板模式。模板模式也是最常见,最简单的设计模式之一。
这就是抽象类的作用,明白了这个,我想代码就不用写了吧。