1. 抽象类的规则
● 抽象类不可以被实例化,也就是不能被new,会出现编译错误。抽象类如果想实例化可以通过非抽象子类的方式去实现。
● 抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类。而且抽象类中的抽象方法只能做方法声明,不能有具体的实现逻辑。
● 抽象类中的抽象方法,在非抽象子类中必须要实现。
● 构造方法、类方法(用static修饰的方法)不能声明为抽象方法。
2. 说明
一般是在设计阶段决定抽象类的使用,抽象类在业务中一般表示一种分类,而其子类这是该分类下的具体。例如 动物 分为 猫、狗等,在代码的实现时可以将 Animal 使用 abstract 修饰,而 Cat 、Dog两个类要继承Animal,如果Animal中有 abstract 修饰的方法,在 Cat 和 Dog必须要实现抽象方法。除非 Cat、Dog 也是使用 abstract修饰。
3. 代码实现
Animal.java
// 抽象类中才可以有抽象方法
public abstract class Animal {
private String name;
// 抽象方法,只需要在此声明即可
// 动物的行动方式
public abstract void action();
public void eat() {
System.out.println("动物都会吃东西");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
** Dog.java**
// 该类是 Animal 的非抽象子类,抽象方法必须要实现
public class Dog extends Animal {
public Dog() {
this.setName("狗");
}
// 此方法在 Aniaml中是非抽象方法,在 Dog 中不是必须重写的方法
@Override
public void eat() {
System.out.println("狗可以吃骨头");
}
// 此方法在 Aniaml中是 抽象方法,在 Dog 中必有具体实现
@Override
public void action() {
System.out.println("狗可以跑");
}
}
Cats.java
// 当 Animal 的子类同为抽象类的时候,抽象方法可以不用实现
public abstract class Cat extends Animal {
public Cat() {
this.setName("猫类");
}
}
抽象类 Animal 是不能直接使用new创建实例的,只能通过 实例化其非抽象子类
public static void main(String[] args) {
// 实例化方式
Animal dog = new Dog();
// 此种方式相当于直接创建一个 非抽象类,不是抽象类实例化的一种方式
Animal animal = new Animal() {
@Override
public void action() {
}
};
}
标签:java,定义,Dog,抽象,Animal,抽象类,方法,public
From: https://www.cnblogs.com/xiangningdeguang/p/16954385.html