抽象类是声明为抽象的类,可以具有抽象或非抽象方法。抽象类不能被实例化。它可以由子类扩展以实现抽象方法并使用或覆盖具体方法。
java中的抽象方法
抽象方法是没有实现的方法,即它没有任何人。
abstract class Shape{
public abstract double calculateArea(); }
java什么时候需要抽象类?
让我们在示例的帮助下理解它。你有 Shape 类,它有一些方法,如 draw()、calcualteArea() 等。绘制一个形状对于所有形状都是常见的,但每个形状的 calculateArea() 是不同的。
例如:
对于矩形,它将计算为长度 宽度,对于圆形,它将是 pi 半径^2。
因此,对于上述行为,我们将在 shape 类中实现 draw() 方法,并将创建 calcualteArea() 作为抽象方法。因此,如果您有一些常见的行为和一些特定的行为,请将您的类抽象化。
让我们创建一个抽象类作为 Shape 和 Rectangle,Circle 类作为具体类。
java中抽象类的例子:
package org.arpit.java2blog;
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;
}
}
创建一个名为“AbstractClassMain”的主类
package org.arpit.java2blog;
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(“Draw method in shape class”); } }
案例2:类包含抽象方法,但可以不将类声明为抽象吗? 答: 不,必须将类声明为 Abstract,但它包含抽象方法。
class Shape{
public void draw()
{
System.out.println("Draw method in shape class");
}
public abstract double calculateArea();
}
你会得到编译错误:
-
第 1 行:“Shape 类型必须是抽象类才能定义抽象方法”
-
第 7 行:“Shape 类型中的抽象方法 calculateArea 只能由抽象类定义”
如果类中有抽象方法,则类必须在java中声明为抽象类
案例3:可以同时声明class为final和abstract吗?
回答:
不,您不能同时将类声明为最终类和抽象类。Final 意味着没有其他类可以扩展该类,而 Abstract 意味着 Class 必须由任何其他类扩展。
案例4:可以**在java中**实例化抽象类吗?
回答:
不,你不能实例化抽象类。
你不能在java中实例化抽象类
案例5:如果你在java中扩展一个抽象类,你需要实现那个类的所有抽象方法吗?
回答:
是的,你需要实现超类的所有抽象方法,除非子类也是java中的抽象类。
|