Java的抽象类

时间:2020-02-23 14:37:03  来源:igfitidea点击:

一个抽象类是声明抽象的类,可以有抽象或者非抽象方法。
无法实例化抽象类。
它可以通过子类扩展来实现抽象方法和使用或者覆盖具体方法。

Java的抽象方法

抽象方法是没有实施方式的方法。

abstract class Shape{
public abstract double calculateArea(); 
}

你什么时候需要java抽象类?

我们有Shape Class,它有一些方法,如Draw(),CalcualteAlea()等。
绘制形状对于所有形状是常见的,但ConculateAlea()对于每个形状不同。

例如:

对于矩形,它将计算为长度*宽度和圆圈,它将是PI *半径^ 2.

因此,对于上面的行为,我们将在形状类中实现draw()方法,并将CompualTeAlea()作为抽象方法。
所以如果我们有一些常见的行为和某些特定的行为,请制作课堂摘要。

让我们创建一个抽象类作为形状和矩形,圈类作为具体类。

Java中的抽象类示例:

package org.arpit.theitroad;
 
abstract class Shape{
 
	public void draw()
	{
		System.out.println("Draw method in shape class");
	}
	
	public abstract double calculateArea();
}
 
class Rectangle extends Shape
{	
	double length;
	double breadth;
	
	
	public Rectangle(double length, double breadth) {
		super();
		this.length = length;
		this.breadth = breadth;
	}
 
	@Override
	public double calculateArea() {		
		return length*breadth;
	}
}
 
class Circle extends Shape
{
    double radius;
        
	public Circle(double radius) {
		super();
		this.radius = radius;
	}
 
	@Override
	public double calculateArea() {
		return 3.14*radius*radius;
	}
}

创建一个名为"AdtractClassmain"的主类

package org.arpit.theitroad;
 
public class AbstactClassMain {
 
	public static void main(String[] args)
	{
		System.out.println("============================");
		Rectangle rec=new Rectangle(3, 4);
		rec.draw();
		System.out.println("Area of rectangle is "+rec.calculateArea());
		System.out.println("============================");
	
		Circle cir=new Circle(3);
		cir.draw();
		System.out.println("Area of circle is "+cir.calculateArea());
		System.out.println("============================");
	}
}
============================
Draw method in shape class
Area of rectangle is 12.0
============================
Draw method in shape class
Area of circle is 28.259999999999998
============================

让我们考虑一些情况来了解Java中的抽象类更好:

情况1:是否可以在课堂上具有零抽象方法,但我们仍然可以将类视为摘要。

答:是的,即使我们在类中没有任何抽象方法,也可以将类视为摘要。
例如:

abstract class Shape{

public void draw(){system.out.println("形状类中的绘制方法");}
}

情况2:类包含抽象方法,但是否可以将类视为摘要?

答:否,必须将类视为摘要,但它包含抽象方法。

class Shape{
 
	public void draw()
	{
		System.out.println("Draw method in shape class");
	}
	
	public abstract double calculateArea();
}

我们将获得编辑错误:

  • 在第1行:"类型形状必须是抽象类以定义抽象方法"
  • 在第7行:"型形状的抽象方法CalculateAlea只能由抽象类定义"

如果类中有抽象方法,则类必须在java中声明为抽象类

情况3:我们可以同时将程序声明为最终和摘要吗?

回答:

不,你不能同时向最终和抽象声明类。
最终意味着没有其他类可以扩展该类和抽象的手段必须由任何其他类扩展。

情况4:你能在Java中实例化抽象类吗?

回答:

不,你不能实例化抽象类。

You can not instantiate abstract class in java

情况5:如果我们在Java中扩展了抽象类,我们是否需要实现该类的所有抽象方法?

回答:

是的,我们需要实现超类的所有抽象方法,除非,直到子类也是Java中的抽象类。