1.抽象类必须有构造器么?
抽象类既然都不能被实例化,要构造器有什么用呢?2.抽象类的构造器是不是最好声明为protected?
例如A是一个抽象类,有人说如果构造器声明为protected,就可以防止A a这样的代码出现,这是什么意思呢?3.静态方法可以被重写么?
静态方法是直接通过类名调用的,因此不存在针对具体子类对象的动态方法分配,也就不可能被重写,这种理解对么?

解决方案 »

  1.   

    1.抽象类必须有构造器么? 
    抽象类既然都不能被实例化,要构造器有什么用呢? 
    //有没有都不要紧  但是有时候需要它  比如抽象类能够很好地规范子类的构造方法的话 定义了也无妨 而且还有种特殊情况  请看代码:abstract class A{
    public A(int a){

    }
    }class B extends A{
    public B(int a){ //此处会报错 因为A没有申明无参数的构造方法

    }
    }2.抽象类的构造器是不是最好声明为protected? 
    例如A是一个抽象类,有人说如果构造器声明为protected,就可以防止A a这样的代码出现,这是什么意思呢? 
    //protected是包内和子类可见的,跟你是不是抽象类没多大关系吧?Object类是一切类的父类,你看看Object类的构造方法是什么的?是public的。还是那句话 看你需求了 
    3.静态方法可以被重写么? 
    静态方法是直接通过类名调用的,因此不存在针对具体子类对象的动态方法分配,也就不可能被重写,这种理解对么?
    //重写跟是不是静态的无关
      

  2.   

    1.抽象类必须有构造器么?必须有:因为抽象类往往是为了被子类继承的,子类在实例化的进修就必须首先要实例化其父类,所以父类必须要一个构造函数。无论是默认构造函数还是有参构造函数,必须提供至少一个。就像小猴子的代码中:abstract class A{
        public A(int a){
            
        }
    }class B extends A{
        public B(int a){ //此处会报错 因为A没有申明无参数的构造方法
            super(a);
        }
    }
    只需要显式的调用有参的构造函数就行了。
      

  3.   

    1.抽象类必须有构造器么? 
    无论你建立任何一个类,无论这个类是不是抽象类,它一定有一个构造函数,就算你不显示声明构造函数它都有一个构造函数。
    2.抽象类一般都是用来继承的,所以它的构造函数声明一般都是public,至于是不是protected就看你的实际需求了,如果你希望这个抽象类只能被同一个包中的类继承,那么你可以使用protected。
    3.静态方法不会被覆盖。