Java中的抽象类介绍
Java抽象类
当我们在编写一个类时,常常会为该类定义一些方法,这些方法用来描述该类的行为方式,那么这些方法都有具体的方法体。但是在某些情况下,某个父类只知道其子类应该包含哪些方法,但无法准确的具体描述。当我们在定义一个图形时,这个类中提供了计算周长的算法,但是图形计算周长的方法,不一样,所以父类无法准确的知道其子类计算周长的方法。抽象正是解决这个问题的。
-
抽象类和抽象方法
抽象方法和抽象类都必须使用abstract修饰符来定义,有抽象方法的类只能定义成抽象类,抽象类里可以没有抽象方法。
抽象方法和抽象类必须遵循以下原则:
1.抽象类和抽象方法必须使用abstract关键字来修饰,抽象方法体中不能有方法体。
2.抽象类不能被实例化,无法用new关键字来调用抽象类的构造器创建抽象类的实例。即使抽象类中不包含抽象方法,这个抽象方法也不能被实例化。
3.抽象类中可以包含成员变量、方法、构造器、初始化代码块、内部类5种成分。抽象类的构造器不用于创建实例变量,主要是用于被其子类调用。
4.含有抽象方法的类只能被定义成抽象类。 -
定义抽象方法
定义抽象方法只要在普通方法上增加abstract修饰,并把普通方法的方法体全部去掉,并且在方法之后增加分号即可。
abstract public class AbstractTest { //定义抽象方法 public abstract void fly(); public abstract int i = 1;//错误 //abstract不能用于修饰类方法 public abstract static void sleep(); //abstract不能用于修饰final类型的方法 public abstract final void breath(); }
abstract 不能用于修饰成员变量。不能用于修饰局部变量。即没有抽象成员变量等说法。abstract也不能用于修饰构造器,没有抽象构造器,抽象类里定义的构造器只能是普通构造器。
abstract 不能用于修饰static方法,即通过该类去调用该方法,但如果该方法被定义成抽象方法,则导致通过该类调用该方法是出现错误(调用了一个没有方法体的方法,肯定会出错,所以不能定义)。
abstract不能用于修饰final的方法,该方法用了final之后就是一个不能被重写,而abstract修饰的方法,必须重写。
下面我们实现以下抽象类
//定义一个抽象类,计算面积 abstract class Shape { public Shape(){ } public abstract double findArea (); } //继承抽象类,实现一个圆的面积计算的方法 public class RealAbstract extends Shape { private double redius; public double getRedius() { return redius; } public void setRedius(double redius) { this.redius = redius; } @Override public double findArea() { return Math.PI * redius * redius; } public static void main(String[] args) { RealAbstract realAbstract = new RealAbstract(); //设置圆的半径 realAbstract.setRedius(5.6); //计算圆的面积 System.out.println(realAbstract.findArea()); } }
本文地址:https://blog.csdn.net/m0_46189068/article/details/108034584