- 抽象类的类名必须要有abstract修饰
类名的访问修饰符只能为pubulic - 抽象类可以不包括任何方法(包括抽象方法)和属性
// 定义一个抽象类可以不包括抽象类可以不包括任何方法(包括抽象方法)和属性
public abstract class Abs {
}
- 抽象类的属性和方法
属性:抽象类的属性和普通类的属性一致,private和final修饰的属性不能被继承
public abstract class Abs {
private int b = 1;
int a = 2;
public static final String bl = "ABSDDASDW";
protected int c = 3;
}
public class AbsTest extends Abs {
public static void main(String[] args) {
AbsTest absTest = new AbsTest();
System.out.println(absTest.a); // 2
System.out.println(absTest.c); // 3
System.out.println(absTest.bl); // ABSDDASDW
}
}
方法:抽象方法需要abstract关键字修饰,抽象方法没有方法体,抽象方法不允许有关键字private修饰。抽象类可以有普通方法和私有方法以及构造方法。
public abstract class Abs {
private int b = 1;
int a = 2;
public static final String bl = "ABSDDASDW";
protected int c = 3;
public abstract void a();
protected abstract void b();
abstract void c();
private abstract void pri(); // 报错 Illegal combination of modifiers: 'abstract' and 'private'
public void d(){
System.out.println("执行d方法");
}
private void e(){
System.out.println("执行了e方法");
}
protected void f(){
System.out.println("执行了f方法");
}
public Abs(){
System.out.println("Abs构造方法");
}
protected Abs(int a){
this.a = a;
System.out.println("Abs带参数" + a + "的构造方法");
}
}
public class AbsTest extends Abs {
@Override
public void a() {
}
@Override
protected void b() {
}
@Override
void c() {
}
public AbsTest(int e){
super(e);
}
public AbsTest(){
}
public static void main(String[] args) {
AbsTest absTest = new AbsTest(); // Abs构造方法
System.out.println(absTest.a);
System.out.println(absTest.c);
absTest.d(); // 执行了d方法
absTest.f(); // 执行了f方法
new AbsTest(1); // Abs带参数1的构造方法
}
}
- 抽象类不能被实例化
Abs abs = new Abs(); // 'Abs' is abstract; cannot be instantiated
- 抽象类不一定要有抽象方法。