Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java继承:如何在Super中声明静态变量并在子类中实例化它_Java_Oop_Inheritance - Fatal编程技术网

Java继承:如何在Super中声明静态变量并在子类中实例化它

Java继承:如何在Super中声明静态变量并在子类中实例化它,java,oop,inheritance,Java,Oop,Inheritance,如何在Super中声明静态变量并在子类中实例化它 范例 class A { static Queue<String> myArray; public void doStuff() { myArray.add(someMethod.getStuff()); } } class B extends A { myArray = new LinkedList<String>(); } class C extends A { myArra

如何在Super中声明静态变量并在子类中实例化它

范例

class A
{
  static Queue<String> myArray;

  public void doStuff()
  {
     myArray.add(someMethod.getStuff());
  } 

}
class B extends A
{
  myArray = new LinkedList<String>();

}

class C extends A
{
  myArray = new LinkedList<String>();

}
A类
{
静态队列数组;
公共空间
{
添加(someMethod.getStuff());
} 
}
B类扩展了A类
{
myArray=newLinkedList();
}
C类扩展了
{
myArray=newLinkedList();
}

显然,这是行不通的。但是,您将如何声明一个变量;然后在超类中使用变量执行一些公共功能;然后确保每个子类都有自己的静态LinkedList?

您不能按照这些思路进行操作。你能做的最接近的事情就是在超类中有一个抽象(非静态)方法,并用它做一些事情


但一般来说,你不能强迫子类做任何静态的事情,也不能像你试图做的那样从超类访问子类的静态字段。

你不能按照这些思路做事情。你能做的最接近的事情就是在超类中有一个抽象(非静态)方法,并用它做一些事情


但一般来说,您不能强制子类执行任何静态操作,也不能像您尝试执行的那样从超类访问子类的静态字段。

静态变量
绑定到类而不是实例。如果子类需要单独的静态变量,则需要在每个子类中声明它们。

静态变量
绑定到类而不是实例。如果子类需要一个单独的静态变量,则需要在每个子类中声明它们。

因为要处理子类特定的属性,所以不能在超类中进行操作,而且这样做也不符合逻辑。如前所述,您可以这样做:

abstract class A {
      public abstract void doStuff();       
    }

class B extends A    {
  static List<String>myArray = new LinkedList<String>();

  public abstract void doStuff() {
      // do B stuff
  }

}

class C extends A  {
  static List<String>myArray = new LinkedList<String>();
  public abstract void doStuff() {
      // do C stuff
  }

}
抽象类A{
公开摘要无效doStuff();
}
B类扩展了A类{
静态ListmyArray=newLinkedList();
公开摘要void doStuff(){
//做B类事情
}
}
C类扩展了{
静态ListmyArray=newLinkedList();
公开摘要void doStuff(){
//做C类的事情
}
}

因为您有子类特定的属性要操作,所以不能在超类中进行操作,而且无论如何这样做都是不合逻辑的。如前所述,您可以这样做:

abstract class A {
      public abstract void doStuff();       
    }

class B extends A    {
  static List<String>myArray = new LinkedList<String>();

  public abstract void doStuff() {
      // do B stuff
  }

}

class C extends A  {
  static List<String>myArray = new LinkedList<String>();
  public abstract void doStuff() {
      // do C stuff
  }

}
抽象类A{
公开摘要无效doStuff();
}
B类扩展了A类{
静态ListmyArray=newLinkedList();
公开摘要void doStuff(){
//做B类事情
}
}
C类扩展了{
静态ListmyArray=newLinkedList();
公开摘要void doStuff(){
//做C类的事情
}
}

为什么要这样做?这将解决什么问题?我想拥有数组操作的通用功能,并让每个子类都有自己的静态数组。因此总共会有两个静态数组,事实上第一个方法本身不会编译。您正在非静态方法中使用静态arrayList。为什么要这样做?这将解决什么问题?我想拥有数组操作的通用功能,并让每个子类都有自己的静态数组。因此总共会有两个静态数组,事实上第一个方法本身不会编译。您正在非静态方法中使用静态arrayList。。