1.什么是抽象类
类和类之间有共同特征,将这些具有共同特征的类,在进一步抽象形成抽象类。由于类本身不存在,所以抽象类无法创建对象。
抽象类与抽象类之间也可能会有共同特征,也可以进一步抽象
2.抽象类属于什么类型
抽象类型也属于引用数据类型
3.抽象类怎么定义
语法:
{修饰符列表} abstract class 类名{
类体;
}
4.抽象类是无法实例化的,无法创建对象的,所以抽象类是用来被子类继承的,抽象类的子类可以是抽象类。
5.final与abstract不能联合使用,不能同时出现。
6.抽象类虽然不能实例化,但抽象类有构造方法,供子类使用,构造方法不能继承。
7.抽象类关联到一个概念:抽象方法。
抽象方法:没有实现的方法,没有方法体的方法
eg:public abstract void doSome();
特点:1.没有方法体,以分号结尾
2.前面修饰符列表中有abstract关键字
3.抽象类中不一定有抽象方法,但抽象方法必须是在抽象类下面,否则报错
8.父类为抽象类且有抽象方法时,子类为非抽象类,子类会继承父类的抽象方法时,需要使用重写/覆盖的方法,把抽象的方法实现了。
结论:一个非抽象类继承抽象类,必须把抽象方法实现了,这是java语法强行规定的。这里的实现也可叫为重写/覆盖。
public class AbstractTest {
public static void main(String[] args) {
// Account是抽象类,无法创建对象
//使用多态
//这就是面向抽象编程,Account是抽象的
Account account = new CreditAccount2();//向上转型,父类型引指向子类型对象
account.move();
/*抽象的子类IDE自动重写方法,创建对象
Account account1 = new CreditAccount() {
@Override
public void move() {
System.out.println("2");
}
};
account1.move();
*/
}
}
abstract class Account{
public abstract void move();
//抽象方法
}
abstract class CreditAccount extends Account{
//抽象的子类
public abstract void move();
public CreditAccount(){
System.out.println("抽象子类的构造方法");
}
}
//非抽象的子类继承抽象的父类时,需要重写父类中的抽象方法才能正常使用
class CreditAccount2 extends Account{
public void move(){
System.out.println("非抽象子类");
}
}