如何理解抽象类?

抽象类

当我们编写一个类时,常常会在该类中定义一些方法,这些方法通常情况下是具体的,但在某些情况下,我们无法准确的知道这些方法的细节,这时候就需要我们创建一个抽象类,这些方法就是抽象方法。抽象类一般指父类,专门用来让子类继承,抽象方法必须被子类重写。我们通过添加abstract关键字来使该类变成抽象类,同样添加abstract关键字使方法变成抽象方法。

注意:
一个抽象类中可以不定义抽象方法,但是只要类中有一个抽象方法,则该类一定是抽象类。
抽象类不能被实例化。
如果一个子类继承一个抽象类,则子类需要通过覆盖的方式来重写抽象类中的所有抽象方法。如果子类没有完全重写抽象父类中所有方法,则子类仍是抽象的。
抽象方法可以与public,protected复合使用,但不能与final,private和static使用。
abstract不能用于修饰属性,修饰局部变量,也不能用于修饰构造器。

实例:要求计算图形三角形,圆形,矩形的面积,要求定义一个抽象的图形类,并定义三角形,矩形,圆形这三个子类继承其抽象的图形类,代码如下:
创建图形的抽象父类Shpae

package com.section4;

public abstract class Shape {
	private String color;

	public abstract double calcPerimenter();

	public abstract String getType();

	public Shape(String color) {
		this.color = color;
		System.out.println("---执行了Shape类的构造方法---");
	}

	public String setColor() {

		return this.color = color;
	}

	public String getColor() {
		return color;
	}
}

创建三角形类(Tirangle),且继承父类

package com.section4;

public class Triangle extends Shape {
	private double x;
	private double y;

	public Triangle(String color, double x, double y) {
		super(color);
		this.setSide(x, y);
	}

	private void setSide(double x, double y) {
		this.x = x;
		this.y = y;
	}

	public double calcPerimenter() {

		return (x * y) / 2;
	}

	public String getType() {

		return "三角形";
	}

}

创建圆形类(Circle),且继承父类

package com.section4;

public class Circle extends Shape {
	private double r;

	public Circle(String color, double r) {
		super(color);
		this.r = r;
	}

	public double calcPerimenter() {

		return 2 * Math.PI * (r * r);
	}

	public String getType() {

		return "圆形";
	}

	public double getR() {
		return r;
	}

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

创建矩形类(Rectangle),且继承父类

package com.section4;

public class Rectangle extends Shape {
	public double a;
	public double b;

	public Rectangle(String color, double a, double b) {
		super(color);
		this.a = a;
		this.b = b;
	}

	public double calcPerimenter() {

		return a * b;
	}

	public String getType() {

		return "矩形";
	}

}
package com.section4;

public class Test {

	public static void main(String[] args) {
		Triangle tr = new Triangle(null, 2, 2);
		Rectangle re = new Rectangle(null, 2, 3);
		Circle ci = new Circle(null, 4);
		System.out.println(tr.getType() + "面积=" + tr.calcPerimenter());
		System.out.println(re.getType() + "面积=" + re.calcPerimenter());
		System.out.println(ci.getType() + "面积=" + ci.calcPerimenter());
	}

}

运行结果如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值