java语言基础之抽象类

一、抽象的概念

     生活中有很多概念是抽象的,与之对应的是具体事物。

   例如:

抽象概念 具体事物
形状 三角形、矩形、圆形等
车辆 公交车、火车、小汽车等

二、抽象类的声明

以形状(Shape)为例:

package com.yg.abs;

//使用abstract修饰的类称为抽象类
public abstract class Shape {
	
	protected double area;//抽象类可以定义变量
	
	/**
	 * 使用abstract修饰的方法称为抽象方法,没有方法体
	 * 没有确定具体形状前,不可能求得了面积。
	 * 所以先声明为抽象方法,让具体的子类去实现
	 */
	public abstract double getArea();
	
	//抽象类也可以有非抽象方法
	public void print()
	{
		System.out.println("形状");
	}
	
}

具体的矩形类,继承Shape类: 

package com.yg.abs;

//矩形
public class Rectangle extends Shape{

	double w;//底
	double h;//高
	 
	public Rectangle(double w, double h) {
		super();
		this.w = w;
		this.h = h;
	}

	//必须重写父类抽象方法
	@Override
	public double getArea() {
		// TODO 自动生成的方法存根
		return w * h;
	}

}

具体的三角形类,继承Shape类

package com.yg.abs;

public class Triangle extends Shape{

	double w;//底
	double h;//高
	
	public Triangle(double w, double h) {
		super();
		this.w = w;
		this.h = h;
	}

	@Override
	public double getArea() {
		// TODO 自动生成的方法存根
		return w * h /2;
	}
	
}

形状测试类:

package com.yg.abs;

public class ShapeTest {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		//Shape s = new Shape();//会报错,因为抽象类不可以实例化
		
		Shape shape = new Rectangle(5,6);//引用子类实例
		double area = shape.getArea();//会调用矩形的求面积方法
		System.out.println(area);
		
		shape = new Triangle(5,6);//引用另一个子类实例
		area = shape.getArea();//会调用三角形的求面积方法
		System.out.println(area);
	}

}

三、抽象的意义

方便构建对象体系,利于程序的扩充。越抽象,越能体现事物的本质。

上述例子,如果需要求圆形面积,只需要新增圆形类继承Shape类并实现抽象方法。

测试类让Shape类引用圆形实例即可,无须改动其它地方。

四、注意事项

1. 有抽象方法的类一定要声明为抽象类

2. 抽象类可以有非抽象方法

3. 抽象类的子类可以是抽象类也可以是非抽象类

   非抽象子类必须实现父类的抽象方法。

4. 抽象类不可以实例化,因为抽象和实例本来就是相对的概念。

猜你喜欢

转载自blog.csdn.net/qq_42864422/article/details/105794744