Lehet, hogy elmaradtam valamiben. Nem szoktam publikus változókat használni, csak ritkán.
Miért ezt írja ki az alábbi progi?: "B 2"
class A {
public int a = 2;
public void f() {
a+=5;
System.out.print("A ");
}
}
class B extends A {
public int a = 7;
public void f() {
this.a += 3;
System.out.print("B ");
}
}
public class task4 {
public static void main(String[]args) {
A x = new B();
x.f();
System.out.println(x.a);
}
}
- 2093 megtekintés
Hozzászólások
Hát én pl. Debuggolnam az ide-ben és akkor kiderül. Nem programoztam javában, de gondolom a debug során jól látszana mi történik.
- A hozzászóláshoz be kell jelentkezni
Köszi a választ, de már debugoltam.
Arra keresem a választ mi, miért történik.
x.f() meghívódik a B-ből, ott át is állítja a B változóját.
x.a viszont már az A-ból veszi az értéket.
- A hozzászóláshoz be kell jelentkezni
Az a fieldet a B-ben definiált field elrejti, viszont az f metódust a B-ben definiált metódus overrideolja. Ezért az x.f() hívás a B implementációját futtatja és a B fieldjét módosítja, de az x.a már az A fieldjét adja vissza, mivel az x referenciának A a típusa.
- A hozzászóláshoz be kell jelentkezni
Köszi a választ.
Ha jól értem röviden: A publikus változók máshogy viselkednek, mint a publikus metódusok ebben az esetben.
- A hozzászóláshoz be kell jelentkezni
Igen, mert más történik: https://docs.oracle.com/javase/tutorial/java/IandI/hidevariables.html
- A hozzászóláshoz be kell jelentkezni
Köszi szépen, most már teljesen értem. :-)
- A hozzászóláshoz be kell jelentkezni
Mellesleg ha IDE-ben teszed mindezt, fogsz kapni két figyelmeztetést. Egyrészt az elrejtés miatt, mert nehezen érthető, hibás kódhoz vezethet. Másrészt azért, mert az override-olt metóduson nincs @Override, ami szintén az olvashatóságot segítené.
- A hozzászóláshoz be kell jelentkezni
Hm. Melyik ez az IDE? IntelliJ egy rohand hangot nem mond.
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
- A hozzászóláshoz be kell jelentkezni
Amelyikben automatkusan lefut pl a sonarlint, ami lehet akár az idea is :)
- A hozzászóláshoz be kell jelentkezni
Jó, hát plugintelepítés után már nekem is mondta. De arra számítottam, hogy valamelyikben gyárilag lesz ilyesmi.
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
- A hozzászóláshoz be kell jelentkezni
Rendeset kell használni, pl. eclipse vagy netbeans.
- A hozzászóláshoz be kell jelentkezni
Szólna az, ha jól be lenne állítva. Valamiért by default ki van kapcsolva ez az inspection, meg még egy rakás amit támogat.
- A hozzászóláshoz be kell jelentkezni
Zsír :)
- A hozzászóláshoz be kell jelentkezni
Hiába kapcsoltam be, nem nyekereg, csak a sonarlint :-(
Jav: OK, meglett egy explicit Analyze hatására
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
- A hozzászóláshoz be kell jelentkezni
Jók ezek a szélsőséges dolgok, amelyek a nyelv értelmezésének a határát feszegetik, csak rettentő messze vannak a valós megoldásoktól és az ilyenre szoktam azt mondani, hogy mindenáron kerülendő anti-pattern, mert nem lesz jól olvasható a program, szopás lesz később nem csak módosítani, hanem megérteni is, hogy mi történik. A legtöbb kódellenőrző szoftver is percekig fejhangon sikít egy ilyen példától...
- A hozzászóláshoz be kell jelentkezni
Valóban production kódban ilyennek helye nincs, de tanulni még jó.
Egyébként leginkább a Java nyelv tervezői tanulhatnának belőle. Lehet jobb lenne az elrejtést syntax errornak venni, és @Override helyett szerintem pl. a C# szebben oldotta meg a kötelező override kulcsszóval.
- A hozzászóláshoz be kell jelentkezni
Anti-pattern megoldásokat értelmetlen tanulni. A legjobban azt utálom, amikor valaki interjún szopat ilyenekkel jelölteket. :/
- A hozzászóláshoz be kell jelentkezni
attól függ milyen szint.
a senior jelölt ilyenkor mondja azt h ez egy antipattern, indoklással.
a junior mondja azt h szerinte ronda és nem írna ilyet.
--
Gábriel Ákos
- A hozzászóláshoz be kell jelentkezni
Én is rühellem az ilyeneket, de fenntartom, hogy a nyelv apró "szépségeit" néha ilyen kifacsart példákkal lehet szemléltetni. Egy ilyen feladványra magától is rájöhet valaki, ha rengeteget tud már a nyelvről. De ha nem jön rá, abból nem igazán következik semmi, ezért nem jó interjúra. Főleg az a baj interjú szempontjából, hogy a valósághoz nem sok köze van a feladatnak. Egyrészt ugye valóságban ilyet nem ír az ember, másrészt a valóságban IDE-t használunk, amiben van jump to funkció, meg debugger, és ki lehet bogozni, ha mégis ilyennel találkozunk össze.
- A hozzászóláshoz be kell jelentkezni
Ez jól hangzik, de egy öntanuló kezdő honnan tudja, hogy ez antipattern?
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
- A hozzászóláshoz be kell jelentkezni
Túl sok lesz a fejében a "WTF" gondolat.
- A hozzászóláshoz be kell jelentkezni
ideális zh feladat :)
--
Gábriel Ákos
- A hozzászóláshoz be kell jelentkezni
Az a kafa, mikor a mukodes direkt epul egy ilyen finomsagra :D
- A hozzászóláshoz be kell jelentkezni
Nem, az az igazán kafa, amikor ezt még megspékeled egy jó kis reflectionnel és futási időben valahol húsz szint mélységből kapod a Class példányt, aminek a megfelelő Fieldjét string névvel kikeresed :) Happy debugging motherfucker :P Happy debugging, suckers :P
Szerk.: idézni csak pontosan, szépen, ahogy a csillag megy az égen, úgy szabad. Én meg rosszul idéztem, javítva.
package helloworld;
public class HelloWorld {
public static class A {
public int foo = 4;
}
public static class B extends A {
public int foo = 5;
}
public static void main(String[] args) throws Exception {
B inst = new B();
System.out.println(inst.foo); // 5
System.out.println(((A) inst).foo); // 4
System.out.println(((B) inst).foo); // 5
System.out.println(Class.forName("helloworld.HelloWorld$A").getField("foo").getInt(inst)); // 4, de ugye a Class-t hozhatod bárhonnan ;)
System.out.println(Class.forName("helloworld.HelloWorld$B").getField("foo").getInt(inst)); // 5, de ugye a Class-t hozhatod bárhonnan ;)
}
}
BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)
- A hozzászóláshoz be kell jelentkezni
Főleg, ha - megtörtént eset - egy hetes szopás után azt látod, hogy a problémás sor felett ott van egy komment:
// Ebből még baj lesz...
- A hozzászóláshoz be kell jelentkezni
Ez mind rendben van, de egy interjún ettől még helye van egy ilyen kérdésnek. Azt is meg kell tudni indokolni, hogy valami miért antipattern, ahhoz meg már nem árt érteni, mi történik. Felhoznám még példának a Deep C-t, az üzenete független a programozási nyelvtől.
- A hozzászóláshoz be kell jelentkezni