Zdravim,
mam nasledujucu situaciu:
class A{
String[] string = new String[10];
{
class B{
}
A teraz otazka. ako mozem pristupit k hodnotam v poli string v triede A z triedy B?
daka
#1 lama
co takto ? funguje ?
package pokusy;
public class Pokusy {
public static void main(String[] args) {
A a = new A();
B b = new B();
b.getString();
}
}
class A {
String[] string = new String[10];
public String[] getString() {
return string;
}
}
class B extends A {
@Override
public String[] getString() {
return super.getString();
}
}
Mozes, ale musis najskor vediet kde sa to pole nachadza a samozrejme musi exisotvat. Cize bud odosles pointer na to pole priamo do B alebo aspon na A. Cize videl by som to asi takto:
// toto moze byt v hociakom classe, ale tako cez ktory budes pristupovat do programu
public static main(String arg[]){
A a = new A(10);
// vlozis nejaky text
B b = new B(a);
C c = new C(a.text);
b.nacitaj(3);
c.nacitaj(8);
}
class A {
String[];
public A(int n) {
text = new String[n];
}
public void vlozText(String retzec){
// nejaky kod na vkladanie
}
}
class B {
A a;
public B(A a) {
this.a = a;
}
public String nacitaj(int i) {
return a.text[i];
}
}
class C {
String[] text;
public C(String[] text) {
this.text = text;
}
public String nacitaj(int i) {
return text[i];
}
}
pripadne ak by bolo pole String[] typu static tak mozes priamo a to A.text[i].
Řekněme že na chvilku zapomeneme na zapouzdření. To pole Stringů v třídě A je instanční atribut, takže abys k němu mohl přistupovat, musíš vytvořit objekt třídy A.
Třeba takto:
class A{
String[] pole = new String[20];
}
class B{
public void vypisStringZTridyA(){
A instance = new A();
for(int i = 0; i < instance.pole.length; i++){
System.out.println(instance.pole[i]);
}
}
}
Pokud se to zdá divné, složité a já nevím co všecko, tak je to proto, že tohle nemá smysl. Vytvářet třídu s jedním instančním atributem nemá smysl, pokud k němu nechceš ještě implementovat nějaké metody (a i na to by se asi víc hodila knihovní třída).
#2 michal
To podle mého vůbec neřeší jeho problém, pokud jsem ho správně pochopil. Pokud bude mít v main() jak jsi to napsal v objektu A nějaké stringy, b.getString() vypíše String z objektu B a ne z A.
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku