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();
}
}
抽象类不一定含有抽象方法,只要保证抽象方法所在的类是抽象类。
这样没有抽象方法的抽象类,也不能直接创建对象,在一些特殊场景下有用途。
🎈抽象方法主要作用:捕捉子类的通用特性.
总结:
- 抽象类中可以没有抽象方法,但是抽象方法一定在抽象类中:
- 抽象类是不能直接使用new操作符来初始化;
- 子类可以覆盖抽象父类的方法并将它定义为abstract;
- 子类的父类是具体的,这个子类可以是抽象的;
- 不能使用new操作符从一个抽象类创建一个实例,但是抽象类可以用作一种数据类型;