抽象类
概念
Java中可以定义被abstract关键字修饰的方法,这种方法只有声明,没有方法体,叫做抽象方法.
Java中可以定义被abstract关键字修饰的类,被abstract关键字修饰的类叫做抽象类,抽象类中的方法不做限制,全为普通方法、全为抽象方法、抽象方法与普通方法并存
- 如果一个类含有抽象方法,那么它一定是抽象类
- 抽象类中的方法实现交给子类来完成
一个子类继承了一个抽象父类,有两种方案
- 变成抽象子类,“躺平”,也不实现,继续抽象
- 实现抽象子类中的所有抽象方法,“父债子偿”
语法格式
abstract class 类名{}修饰符 abstract 返回值类型 方法名(参数列表);
示例
```java package cn.tedu.oop;
public class AbstractDemo { public static void main(String[] args) {
}
}
//被abstract修饰的类为抽象类,若一个类中包含抽象方法,那么这个类必须被声明为一个抽象类 abstract class Car{ public void start(){ System.out.println(“启动发动机”); }
public void stop(){System.out.println("熄火了");}/*被abstract修饰的方法是抽象方法,抽象方法没有方法体添加抽象方法后,抽象方法所在类必须为抽象类*/public abstract void run();public abstract void run1();
}
/ 当一个子类继承抽象的父类后有两种解决方法 1.变成抽象子类,”躺平“,也不实现,继续抽象 2.实现抽象子类中的所有抽象方法,”父债子偿“ / abstract class BMW extends Car{
}
class TOYOTA extends Car{ @Override public void run(){ System.out.println(“跑起来了”); }
@Overridepublic void run1() {System.out.println("快的要起飞了");}
}
<a name="q8y9n"></a>## 注意事项_抽象类有构造方法,但抽象类不可实例化<br />创建构造函数的意义:不为了自己使用,而是为了子类创建对象时使用_<a name="TtztB"></a>### 示例<a name="JHnzV"></a>#### 抽象类中构造函数的使用```javapackage cn.tedu.oop;/*** 用于测试抽象类中构造函数的使用*/public class AbstractDemo2 {public static void main(String[] args) {/*Biological b = new Biological();无法创建父类的对象---报错*/Human h = new Human();}}/*抽象类有构造方法,但抽象类不可实例化创建构造函数的意义:不为了自己使用,而是为了子类创建对象时使用*/abstract class Biological{public Biological() {System.out.println("生物类的无参构造");}}class Human extends Biological{public Human() {super();System.out.println("人类类的无参构造");}}
抽象类中成员变量的使用
package cn.tedu.oop;public class AbstractDemo3 {public static void main(String[] args) {}}/*如果父类中都是普通方法,那为什么要定义成抽象类?因为抽象类不可以被实例化,如果不想让别人创建本类就可以把普通类定义成抽象类抽象类中可以定义抽象方法,也可以全都为抽象方法*/abstract class Fruit{/*抽象类中可以创建成员变量,可以创建成员常量*/int sum = 100;final String name = "水果";/*抽象类中可以定义普通方法,也可以全都是普通方法*/public void clean(){System.out.println("水果要洗洗再吃");}public abstract void grow();public abstract void eat();}class Apple extends Fruit{@Overridepublic void grow() {System.out.println("苹果成熟需要时间");}@Overridepublic void eat() {System.out.println("苹果可以削皮再吃");}}
