Android-Java——abstract类实践记录,抽象类的构造方法

抽象类中的构造方法

  • 抽象类中包含无参构造方法

例:

public abstract class A {

    public A(){}

    public A(String s){}

    public A(String s,int a){}
}

这种情况,子类可以不显示写构造方法,会隐式调用。

public class A1 extends A {
}
  • 抽象类中只有有参构造方法
public abstract class A {
    
    public A(String s){}

    public A(String s,int a){}
}

 这种情况,子类必须实现至少一个构造方法。且必须显示调用父类。并且super()必须放在构造方法的第一行。

 

 

其他:

这个问题是在使用SQLiteOpenHelper时注意到的。我写了一个子类继承它发现除了要实现抽象方法外,还强制必须重写构造方法,然后就想知道这种强制要求是如何实现的,最终发现是由关键字abstract控制。

另外,在重写的时候,还注意到:

Android-Java——abstract类实践记录,抽象类的构造方法_第1张图片

只有三个构造方法,但SQLiteOpenHelper中有四个public构造方法,

在其中一个的注释中发现有 @hide 的标识,这个是不能重写的,但也会被调用到。影响倒是不大。

 

然后还了解到了一个注解@RequiresApi

SQLiteOpenHelper的构造方法中有一个是只能在API>=28的版本中使用的,如果我们的 minSdkVersion 小于28,那么就需要这个注解说明一下。如下:

@RequiresApi(api = Build.VERSION_CODES.P)
    public MyDatabaseHelper(@Nullable Context context, @Nullable String name, int version,
                            @NonNull SQLiteDatabase.OpenParams openParams) {
        super(context, name, version, openParams);
    }
@RequiresApi(api = Build.VERSION_CODES.P)
表示只能在api >= Build.VERSION_CODES.P的时候才能调用。

你可能感兴趣的:(Java基础)