抽象类
1、抽象类和抽象方法简述
1、抽象类和抽象方法语法
抽象类和抽象方法必须要用abstract修饰符修饰
例如:
抽象类:
public abstract class Person {
//代码
}
抽象方法:
public abstract void print();
1、抽象类和抽象方法关系
抽象类不一定有抽象方法,但是有抽象方法的要么是抽象类,要么是接口。说明:一个类中如果有抽象方法、那么这个类一定要声明为抽象类。
2、实例化问题
抽象类可以有自己的构造方法,但是不能直接通过new进行实例化但不能说是抽象类就无法实例化。
抽象类其实是可以实例化的,但是它的实例化是通过父类的引用来指向子类的实例,来间接地实现父类的实例化(因为子类要实例化前,一定会先实例化他的父类。这样创建了继承抽象类的子类的对象,也就把其父类(抽象类)给实例化了)。
3、子类
两种情况:要么子类本身就是一个抽象类、要么子类重写了抽象类中的所有抽象方法。
4、成员特点
①成员变量:抽象类中既可以是变量也可以是常量,但是abstract不能修饰成员变量。②构造方法:既可以有无参构造方法,也可以有有参构造方法;作用:用于子类访问父类数据的初始化。举例如下:
public abstract class Person {
private String name;
// 代码
public Person() {
super();
}
public Person(String name) {
super();
this.name = name;
}
public abstract void print();
}
③:成员方法:既可以是抽象方法,也可以是非抽象方法。
问题
1、abstract不能和哪些关键字共存?
1)abstract 和 static 不能共存:
被abstratc修饰的抽象方法是没有方法体的;而被static修饰的方法是可以用类名直接去调用的,用类名调用抽象方法是没有意义的。
2)abstract 和 final 不能共存:
被abstract修饰的方法是强制子类重写的;而被final修饰的方法是不能被子类重写的,自相矛盾;
3)abstract 和 private
被abstract修饰的方法是强制子类重写的;而被private修饰的方法是不能被子类重写的,自相矛盾