Java抽象类和抽象方法

抽象: 事物的共同性质.
✨抽象类不可以用于创建对象。抽象类可以包含抽象的方法,这些方法要在具体的子类中实现。

抽象类:抽象方法所在的类,必须是抽象类才行。在class之前写上abstract即可。

public abstract class Animal {

抽象方法: 就是加上abstract关键字,然后去掉大括号,直接分号结束。

public abstract void eat();

如何使用抽象类和抽象方法:

1. 不能直接创建new抽象类对象。
2. 必须用一个子类来继承抽象父类。`cat extend Animal `
3. 子类必须覆override盖重写抽象父类当中所有的抽象方法。
覆盖重写(实现):子类去掉抽象方法的abstract关键字,然后补上方法体大括号。
4. 创建子类对象进行使用。
5. 抽象类的构造方法定义为protected,因为它只被子类使用。
*/
public abstract class Animal {

    // 这是一个抽象方法,代表吃东西,但是具体吃什么(大括号的内容)不确定。
    public abstract void eat();

    // 这是普通的成员方法
    public void normalMethod() {

    }

}
public class Cat extends Animal {
	//创建子类Cat是一个动物继承父类Animal
    @Override 
    //子类必须覆盖重写抽象父类当中所有的抽象方法。
    public void eat() {
        System.out.println("猫吃鱼");
    }

}
public class DemoMain {

    public static void main(String[] args) {
 // Animal animal = new Animal();
 // 错误写法!不能直接创建抽象类对象 要用一个子类继承父类,覆盖重写父类抽象方法后,才能new一个对象,就是转换一下.
        Cat cat = new Cat();
        cat.eat();
    }

}

抽象类不一定含有抽象方法,只要保证抽象方法所在的类是抽象类。
这样没有抽象方法的抽象类,也不能直接创建对象,在一些特殊场景下有用途。
🎈抽象方法主要作用:捕捉子类的通用特性.

总结:

  1. 抽象类中可以没有抽象方法,但是抽象方法一定在抽象类中:
  2. 抽象类是不能直接使用new操作符来初始化;
  3. 子类可以覆盖抽象父类的方法并将它定义为abstract;
  4. 子类的父类是具体的,这个子类可以是抽象的;
  5. 不能使用new操作符从一个抽象类创建一个实例,但是抽象类可以用作一种数据类型;