抽象方法 和 抽象类
1、抽象类 ( Abstract Class )
关键字:abstract
-
从形式上看抽象类是 由
abstract
修饰的 Java 类 -
-
抽象类
不能被实例化
-
不能通过 new 关键字直接创建抽象类的类型的实例
-
但是可以创建其子类的实例
-
-
抽象类中 可以有
字段
、方法
、构造方法
、代码块
、内部类
特点:
1、抽象类 可以继承 抽象类 具体类可以继承抽象类 抽象类可以继承 具体类 2、抽象方法是 由 abstract 修饰的、没有方法体 的方法 3、有抽象方法的类必须是抽象类
4、如果 具体类 继承了 抽象类,则 必须实现抽象类中的所有方法
2、抽象方法
-
如果某个方法在声明时无法确定其实现细节,则可以省略其实现过程,直接以分号结束
-
如果某个方法省略了实现过程连 { } 都省略了 此时需要为该方法 增加关键字 abstract 表示该方法时抽象的
-
抽象方法就是 由 abstract 修饰的 没有方法体的方法
含有抽象方法的类必须就是抽象类
但是有抽象类不一定有抽象方法
3、示例
Human 类
package abstractclass;
import java.util.Objects;
/** 1、抽象类 与 具体类 的区别是 抽象类不可以实例化
* 2、抽象类 不一定要有抽象方法 为了让某个类不能被实例化也可以将该类设计为 抽象类
*
* */
public abstract class Human extends Object { // 抽象类 可以继承实体类
protected String name;
static {
System.out.println("Human:类初始化块");
}
{
System.out.println("Human:实例初始化块");
}
public Human() {
System.out.println("Human()");
}
public Human(String name) {
this.name = name;
System.out.println("Human(String)");
}
public void show() {
System.out.println(this.name);
}
public static void main(String[] args) {
Human h = null;
// h = new Human(); // 【错误】 Human 类是抽象的 无法实例化
}
}
Sinaean 类 有一个抽象方法 eat
package abstractclass;
/**
* 1、抽象类 可以继承 抽象类 具体类可以继承抽象类 抽象类可以继承 具体类
* 2、抽象方法是 由 abstract 修饰的、没有方法体 的方法
* 3、有抽象方法的类必须是抽象类
* */
public abstract class Sinaean extends Human {
// 声明一个抽象方法
public abstract void eat(String foodName); // 没有方法体、由 abstract 修饰符修饰
}
Han 类
package abstractclass;
/**
* 1、如果 具体类 继承了 抽象类,则 必须实现抽象类中的所有方法
*
*
* */
public class Han extends Sinaean {