抽象类
-
abstract修饰符可以用来修饰方法也可以用来修饰类,如果修饰方法,那么该方法就是抽象方法,如果修饰类,那么该类就是抽象类。
-
子类如果要继承抽象类,子类就必须重写父类的方法(抽象类的方法必须由子类来实现),或者将子类也定义为抽象类
-
抽象类不能被直接实例化(不能直接用new关键字来实例化),但可以用子类来创建对象
抽象方法
- 方法用关键字abstract修饰,抽象方法只有方法的定义,没有具体的方法实现
package OOP.chouxianglei;
//抽象类
public abstract class Aciton {
//抽象方法
public abstract void doSomething();
}
子类重写父类(抽象类)方法
package OOP.chouxianglei;
//抽象方法要由子类来实现(子类去重写父类中的抽象方法)
public class A extends Aciton{
@Override //快捷键Alt+insert
public void doSomething() {
}
}
或者直接将子类定义为抽象类
package OOP.chouxianglei;
//将子类也定义为抽象类
public abstract class A extends Aciton{
}
-
抽象类中可以没有抽象方法,但是有抽象方法的类中一定要将类声明为抽象类(即抽象方法必须在抽象类中,可以理解为抽象的抽象:约束)
package OOP.chouxianglei;
//抽象类
public abstract class Aciton {
//约束~有人帮我们实现
//定义了抽象方法,就必须把类定义为抽象类
public abstract void doSomething(); //abstract,抽象方法,只有方法声明,没有方法的实现
//抽象类中也可以些一些普通的方法
public void sayHello(){
System.out.println("Hello");
}
}
类中有抽象方法,就必须把类定义为抽象类,否则程序将报错
注意事项:
-
抽象类,不能用new关键字来创建对象,它是用来让子类继承的(即只能靠子类去实现它:约束)
-
抽象方法,只有方法的声明,没有方法的实现,它是让子类去实现的
-
子类继承抽象类,那么就必须实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类
思考:
1.抽象类是否存在构造方法?
Java的抽象类可以存在构造方法。在Java中,抽象类虽然无法实例化,但仍然可以创建对象。由于抽象类本身无法被实例化,所以其构造方法的主要作用是为其子类提供初始化操作,并且可以在构造方法中对属性进行初始化。抽象类的构造方法不能被直接调用,需要通过子类来调用。另外,抽象类的构造方法也可以被子类重写和继承。需要注意的是抽象类的构造方法不能被声明为private类型,因为私有构造方法无法被子类调用。
2.抽象类存在的意义是什么?
(1). 抽象类可以作为其他类的基类:抽象类是用来被其他类继承的,它可以定义抽象的方法和属性,后续的子类可以根据自己的需求进行实现或覆盖。
(2). 抽象类体现了继承的思想: Java中的继承是面向对象编程中最基本、最重要、最有特色的一种方式。而抽象类就是继承思想在Java语言中的一种具体实现方式。
(3). 抽象类封装了共同的属性和方法:Java是面向对象编程语言,封装是面向对象的三个重要特征之一。抽象类也是一种封装性的体现,它可以封装一些共有的属性和方法,并且供其他类进行调用和使用。
(4). 抽象类保证程序的可扩展性和可维护性:在程序的开发过程中,我们经常会遇到需求变化、接口修改等问题。而抽象类可以保证程序的可扩展性和可维护性,使得程序易于修改和扩展。