Java 请解释抽象类和具体类之间的区别?
我有一个抽象类,包含两个未实现(抽象)的方法,一个实现的方法和一个静态方法,如下代码所示Java 请解释抽象类和具体类之间的区别?,java,abstract-class,Java,Abstract Class,我有一个抽象类,包含两个未实现(抽象)的方法,一个实现的方法和一个静态方法,如下代码所示 public abstract class AbstractClass1 { static void test(){ System.out.println("111"); } public abstract void test2(); public abstract void test3(); public void test4(){ System.out.println(
public abstract class AbstractClass1 {
static void test(){
System.out.println("111");
}
public abstract void test2();
public abstract void test3();
public void test4(){
System.out.println("222");
}
}
我在其他一些抽象类中扩展这个类,如下面的代码
public abstract class AbstractClassImplementation
extends AbstractClass1 {
public static void main(String[] args) {
System.out.println("java abstract doubt");
}
}
我的疑问是,包含抽象方法的AbstractClass1类是否意味着我们必须在子类中扩展它时重写它;但是,如果子类是抽象的,那么这里不会显示错误
假设我的子类不是抽象的;这一次,我必须重写“AbstractClass1”类中可用的所有未实现的方法,请参见下面的示例
public class AbstractClassImplementation extends AbstractClass1{
public static void main(String[] args) {
System.out.println("java abstract doubt");
}
@Override
public void test2() {
System.out.println("overrided here");
}
@Override
public void test3() {
System.out.println("overrided here");
}
}
有人能解释一下吗?
AbstractClassImplementation
本身就是abstract
,因此不必覆盖所有abstract
方法。只有一个具体的(非抽象的
)类必须实现所有的抽象的
方法。因为您的子类也是抽象的(不能初始化),所以您不必实现这些方法,但是在这种情况下,子类(如果不是抽象的话)将必须实现这些抽象方法无需检查AbstractClass2
中抽象方法的实现,因为对象不能实例化为AbstractClass2
从
AbstractClass2
派生的任何具体类都必须实现AbstractClass1
和AbstractClass2
中的所有抽象方法。子类不需要实现抽象超类的方法。所需要的只是任何具体类(您可以初始化的类)必须从其所有超类(包括接口)实现所有尚未实现的方法。其他类不需要实现它们。因为在第二个代码段中,AbstractClassImplementation本身是抽象的,所以它没有显示任何错误
以下是我们对此的看法
当抽象类被子类化时,子类通常提供
父类中所有抽象方法的实现。
但是,如果没有,则还必须声明子类
抽象的
抽象类不需要提供所有的实现,具体类需要为所有类提供一个实现。如果一个抽象类扩展了一个抽象类,它仍然不必实现所有的方法。