1.抽象类
比如图形(Shape)类, 就是一个抽象的概念,因为我们无法计算这个“图形”的面积,所以它的成员函数area()是空的。
而继承它的子类(矩形,椭圆形,三角形等)就可以去覆写area()成员函数. 里面通过数学公式,计算出面积.
参考图形(Shape)类,代码如下:
abstract class Shape //抽象的图形类
{
abstract public double area(); //abstract修饰的方法为抽象方法,无需实现方法体.但是必须被子类覆写
}
class Ellipse extends Shape //椭圆类
{
private double wr; //椭圆的半径宽度
private double hr; //椭圆的半径高度
public Ellipse(double wr,double hr)
{
this.wr = wr;
this.hr = hr;
}
public double area(){
return 3.14159*wr*hr;
}
}
public class Test{
public static void main(String args[])
{
//Shape s = new Shape(); //如果定义抽象类,则将会报错
Ellipse e = new Ellipse(2.5,1);
System.out.println("Ellipse area = "+e.area());
}
}
需要注意的是:
2.抽象内部类定义
在java中,如果我们抽象类的子类只有一个的话,则可以将它封装为抽象内部类里,从而为用户隐藏了这个无需知道的类.在类库中很常见.
示例如下:
abstract class A //抽象类
{
abstract public void printData();//abstract修饰的方法为抽象方法,无需实现方法体.但是必须被子类覆写
static private class B extends A //需要在抽象类里隐藏的内部类
{
private int Data=12;
public void printData()
{
System.out.println("B Data:"+this.Data); //打印内部类的Data值
}
}
static public A getInstance() //获取实例
{
return new B(); //通过静态方法来获取要隐藏的静态抽象内部类 (静态方法里只能使用静态变量)
}
}
public class Test{
public static void main(String args[])
{
A a = A.getInstance();
a.printData(); //等价于: A.getInstance().printData();
}
}
打印如下:
抽象类缺点:
下章学习: 10.JAVA-接口、工厂模式、代理模式、详解