Bootstrap

抽象类(笔记)

抽象类

abstract修饰的类 ,就是抽象类,抽象类不能被实例化 ,用来被继承 ,作为模板

抽象类属性

方法:抽象类中可以有抽象方法 ,有抽象方法的类一定是抽象类。
构造方法: 有, 但是不能被实例化 为子类实例化
抽象方法:abstract修饰 没有方法体的方法
抽象类是单继承。
例如:

	// 定义了一个抽象方法  计算图形的面积
	public abstract double sumArea();

抽象类不能被实例化 有构造方法 (为子类实例化)
抽象父类代码

package com.Abstract.my;

public abstract class Graph {
	public String name;//图形名称
	private double length;//周长
	private double area;//面积

	public abstract double sumLength();

	public abstract double sumArea();

	public double getLength() {
		return length;
	}

	public void setLength(double length) {
		this.length = length;
	}

	public double getArea() {
		return area;
	}

	public void setArea(double area) {
		this.area = area;
	}

	public Graph(String name, double length, double area) {
		super();
		this.name = name;
		this.length = length;
		this.area = area;
	}

	public Graph() {
		super();
	}

	public Graph(String name) {
		super();
		this.name = name;
		System.out.println("图形名称:");
	}

	@Override
	public String toString() {
		return "Graph [name=" + name + ", length=" + length + ", area=" + area + "]";
	}
}

子类在继承的时候必须继承父类的抽象方法,否则会报错。
子类代码

package com.Abstract.my;

public class Round extends Graph {
	private double r;

	public double getR() {
		return r;
	}

	public void setR(double r) {
		this.r = r;
	}

	public Round(String name, double length, double area, double r) {
		super(name, length, area);
		this.r = r;
	}

	public Round(String name, double r) {
		super(name);
		this.r = r;
	}

	public Round() {
		super();
	}

	@Override
	public double sumLength() {
		// TODO Auto-generated method stub
		return 3.14 * 2 * r;
	}

	@Override
	public double sumArea() {
		// TODO Auto-generated method stub
		return 3.14 * r * r;
	}

	public static void main(String[] args) {

		// 抽象类构造方法的作用:为子类实例化
		double r = 3;
		Graph graph = new Round("圆形", r);
		System.out.println(graph.name);
		// 调用计算周长和面积的方法
		// 编译期调用父类的抽象方法 实际运行是子类重写的抽象方法
		System.out.println("半径:"+ r );
		System.out.println("面积:"+graph.sumArea());
		System.out.println("周长:"+graph.sumLength());
	}

}

在实例化对象的时候不能

Graph g = new Graph();//这样是错误的

正确的应该是

Graph graph = new Round();
;