Java继承:如何在Super中声明静态变量并在子类中实例化它
如何在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
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。。