2016-12-10 7 views
0

Мне интересно, что происходит с объектными переменными в абстрактных классах Java. Например, если есть этот абстрактный класс:Абстрактные классы в Java и их объектные переменные

public abstract class BaseClass{ 
private int[] myNumbers; 
public Baseclass(int length){ 
    myNumbers = new int[length]; 
} 
public boolean isOne(int index){ 
    return myNumbers[index] == 1; 
} 
} 

и у меня есть этот реальный класс, который расширяет BaseClass:

public class ArrayClass extends BaseClass{ 
private int[] myNumbers; //i have to define it again? 
public ArrayClass(int length){ 
    super(length); //does this affect my array? I don't think so 
} 
public void setValue(int index, int value){ 
    if(!isOne(index)) 
    myNumbers[index] = value; 
} 
} 

Я хочу, чтобы определить основные операции в моем BaseClass и сделать некоторые другие вещи в моем нормальном ArrayClass. Поскольку мне нужен array в моем BaseClass, я должен определить его для работы с ним разными способами (очевидно).

Но в моем ArrayClass, который распространяется BaseClass Мне нужно определить другой массив. Я не знаю, почему это так, и нужно ли это так? Надеюсь, вы понимаете, что я имею в виду. Например, я мог бы использовать BaseClass второй раз для этого нормального класса:

public class ArrayClass2 extends BaseClass{ 
private int[] myNumbers; 
public ArrayClass2(int length){ 
    super(length); 
} 
public int getValue(int index){ 
    if(!isOne(index)) 
    return myNumbers[index]; 
    else 
    return 1; 
} 
} 
+0

Я уверен, что вы уже прочитали о том, что означает 'private' на Java, но если нет - этот поиск может вам помочь - https://www.bing.com/search?q=java+private –

ответ

0

Java имеет четыре типа доступа. Вы можете прочитать о них here.

Если вы хотите выставить поле своего базового класса своим детям, вы можете использовать защищенный модификатор.

+0

Но что, если я не хочу выставлять переменную? – binaryBigInt

+0

Ну, есть две вещи, которые вы можете сделать, чтобы повторно использовать свой массив. Первый из них использует наследование (например, вы пытаетесь сделать это сейчас) или с композицией. В композиции вы должны создать экземпляр своего базового класса внутри класса массива и делегировать ему массивные операции. – marknorkin

+0

Заметим также, что базовый класс не будет абстрактным в этом случае – marknorkin

 Смежные вопросы

  • Нет связанных вопросов^_^