抽象类和抽象类的深入
抽象类
1、理解
抽象类(Abstract Class)是面向对象编程中的一个重要概念,尤其在像Java、C#和C++等编程语言中。抽象类是一种特殊的类,它不能被实例化(即不能创建抽象类的对象),但可以被其他类继承。抽象类的主要目的是为子类提供一个公共的接口,并实现一些通用的方法或定义一些抽象方法(即只有方法签名,没有方法体)。
最简单的理解:该类中的某个方法不好实现,就将该方法设置为抽象方法,该类就变成抽象类
抽象方法
- 没有代码块,并且使用abstract修饰
- 抽象方法必须在抽象类中
- 交给非抽象的子类重写
2、关键点
- 不能被实例化:因为抽象类是一种不完整的类(它可能包含抽象方法),所以你不能直接创建抽象类的对象。
- 可以包含抽象方法和非抽象方法:抽象方法是没有方法体的方法,只有方法签名。非抽象方法则包含完整的实现。
- 子类:一个抽象类可以有零个或多个子类。如果一个类继承了一个抽象类,那么它必须提供该抽象类中所有抽象方法的实现(除非该子类也是抽象的)。
- 用途:抽象类通常用于定义一组相关的子类所共有的公共接口。通过继承抽象类,子类可以共享一些通用的属性和方法,并且只需要实现它们特有的部分。
3、使用
// 定义一个抽象类
abstract class Animal { // 抽象方法 abstract void makeSound(); // 非抽象方法 void eat() { System.out.println("The animal eats."); }
}
// 继承抽象类的子类
class Dog extends Animal { // 实现从父类继承的抽象方法 @Override void makeSound() { System.out.println("The dog barks."); }
} // 另一个继承抽象类的子类
class Cat extends Animal { // 实现从父类继承的抽象方法 @Override void makeSound() { System.out.println("The cat meows."); }
} // 在主类中测试
public class Main { public static void main(String[] args) { Dog dog = new Dog(); dog.eat(); // 调用非抽象方法 dog.makeSound(); // 调用抽象方法的实现 Cat cat = new Cat(); cat.eat(); // 调用非抽象方法 cat.makeSound(); // 调用抽象方法的实现 }
}
2、抽象类的深入
抽象类中只能有抽象方法?
抽象类中可以有构造方法、静态方法、成员方法、抽象方法
抽象类中不可以没有抽象方法?
如果父类是抽象类,则子类必须实现父类的抽象方法?
抽象类不能有构造方法?
可以使用new关键字来创建抽象类对象?
不能,创建的是匿名内部类的对象
1.抽象类中只能有抽象方法?抽象类中可以有构造方法、静态方法、成员方法、抽象方法2.抽象类中不可以没有抽象方法?可以,但是毫无意义3.如果父类是抽象类,则子类必须实现父类的抽象方法?不一定,子类如果是抽象类,可以不实现父类的抽象方法4.抽象类不能有构造方法?可以有5.可以使用new关键字来创建抽象类对象?不能,创建的是匿名内部类的对象