本文共 8072 字,大约阅读时间需要 26 分钟。
???????????????????????????????????????????? protected ?????????????????????? private ???????????????????????????????protected ???????????
?????? protected ????????????????? private????? protected ????????????????
?????????????????????????????????????????????????????????????????????????
class Instrument { public void play() { } static void tune(Instrument i) { // ... i.play(); }}// Wind objects are instruments// because they have the same interface:public class Wind extends Instrument { public static void main(String[] args) { Wind flute = new Wind(); Instrument.tune(flute); // Upcasting }} tune() ??????? Instrument ?????????? Wind ? main() ????tune() ???????? Wind ?????????????????????????????????????????????????????Wind ?????????? Instrument ????? Instrument ? tune ???????? Wind ??? tune() ????? Instrument ??? Instrument ??????????? Wind ????? Instrument ????????????
????????????????????????????Wind.java ?????
class Instrument { public void play() { } static void tune(Instrument i) { // ... i.play(); }}class Wind extends Instrument { public static void main(String[] args) { Wind flute = new Wind(); Instrument.tune(flute); // Upcasting }} ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????????????????????????? OOP ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????Java ???? final ?????????????????????????????????????????????????????????????????? final?
??????????? final ??????????????
????????????????????????????????????????
????????????????????????????????????????????????????? Java ???????????????????? final ???????????????????
??? static ? final ???????????????????????
?? final ?????????????????????????????????final ????????????????final ???????????????????????????????????????????????????Java ?????????????????????????????????????????????????????????
?? final ?????????? final ???????????? final ??????????????????????????????? final ???????????? final ??????????????
????????????? final ????????????????????????
class Gizmo { public void spin() { }}public class FinalArguments { void with(final Gizmo g) { //-g = new Gizmo(); // Illegal -- g is final } void without(Gizmo g) { g = new Gizmo(); // OK -- g is not final g.spin(); } //void f(final int i) { i++; } // Can't change // You can only read from a final primitive int g(final int i) { return i + 1; } public static void main(String[] args) { FinalArguments bf = new FinalArguments(); bf.without(null); bf.with(null); }} ?? f() ? g() ??? final ??????????????????????????????????????????????????????????
?? final ?????????????????????????????????????????????????????????????????
?????? final ???????????????? Java ?????????????? final?????????????????????????????? final ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???? Java ???????????????????? hotspot ??????????????????????????????????? final ?????????????????? JVM ???????????????????????? final?
????? private ????????? final???? private ???? final ????????????????
?????????????? private ?????? final ????????????????????????
class WithFinals { // Identical to "private" alone: private final void f() { System.out.println("WithFinals.f()"); } // Also automatically "final": private void g() { System.out.println("WithFinals.g()"); }}class OverridingPrivate extends WithFinals { private final void f() { System.out.println("OverridingPrivate.f()"); } private void g() { System.out.println("OverridingPrivate.g()"); }}class OverridingPrivate2 extends OverridingPrivate { public final void f() { System.out.println("OverridingPrivate2.f()"); } public void g() { System.out.println("OverridingPrivate2.g()"); }}public class FinalOverridingIllusion { public static void main(String[] args) { OverridingPrivate2 op2 = new OverridingPrivate2(); op2.f(); op2.g(); // You can upcast: OverridingPrivate op = op2; // But you can't call the methods: //- op.f(); //- op.g(); // Same here: WithFinals wf = op2; //- wf.f(); //- wf.g(); }} ????????????????????????????????????????????????????????????????? private ??????????????????????????????????????????????????????????? public?protected ???????????????????????????????????????????????? private ?????????????????????????????????????????
?????? final?final ???????????????????????????????????????????????????????????????
class SmallBrain {}final class Dinosaur { int i = 7; int j = 1; SmallBrain x = new SmallBrain(); void f() { }}// - class Further extends Dinosaur {} // error: Cannot extend final class 'Dinosaur'public class Jurassic { public static void main(String[] args) { Dinosaur n = new Dinosaur(); n.f(); n.i = 40; n.j++; }} ????????????? final ???????????????????????????????
??????????????????????????????????????????????? final????????????????????????????????????????????????
Java ????????????????? Java 1.0/1.1 ? Vector ????????????????????????????????????????????? final?????? final ??????????[^1]???????????????????????????????????????????????????Stack ??? Vector???? Stack ?? Vector????????????????Java ?????????????????? Stack ?????????? final ???????
???Vector ??????????? addElement() ? elementAt() ??????????????????????????????????????? final ?????????????????????????????????????????????????????????????????????? Java ??? ArrayList ??? Vector?????????????????????????????????????? Vector?
Java 1.0/1.1 ????????????? Hashtable???? HashMap ????????? final ???????????????????????????????Hashtable ?? Vector ????????????????????????????????????????????????????????????????????????????????????
? Java ?????????????????????????????Java ?????????????????????????????????????????????????????????????????????????????????????????? static ????????????? static ????? static ?????????????????????????? static ?????????????
??????? static ?????????? static ??? static ??????????????????????????????static ??????????
??????????????????????????????
class Insect { private int i = 9; protected int j; Insect() { System.out.println("i = " + i + ", j = " + j); j = 39; } private static int x1 = printInit("static Insect.x1 initialized"); static int printInit(String s) { System.out.println(s); return 47; }}public class Beetle extends Insect { private int k = printInit("Beetle.k.initialized"); public Beetle() { System.out.println("k = " + k); System.out.println("j = " + j); } private static int x2 = printInit("static Beetle.x2 initialized"); public static void main(String[] args) { System.out.println("Beetle constructor"); Beetle b = new Beetle(); }} ??? java Beetle???????? Beetle ?? main() ????? static ???????????? Beetle ?????????? Beetle.class ???????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????? Insect?? static ????????????????????????????????? static ?????????????????????
???????????????????????????????????????????????????? null?????????????????????????????????????????????????????? super ???????????? Beetle ??????????????????????????????????????????????????????????????????????????????
转载地址:http://bntx.baihongyu.com/