Java-Java程式設計思想第四版 第七章 練習
阿新 • • 發佈:2018-12-25
練習1:(2)建立一個簡單的類。第二個類中,將一個引用定義為第一個類的物件。運用惰性初始化來例項化 這個物件。
public class Ja7_1{ First f; First getFirst(){ if(f==null){ System.out.println("A Index Was Created"); f=new First(); } return f;//"return" can't be put into a "if{}". } public static void main(String[] args){ Ja7_1 s=new Ja7_1(); System.out.println(s.getFirst()); } } class First{ public String toString(){return "I am indexed";} //can't lose "public" } class Second{ }
在Ja7_1類中,首先定義了First類的一個引用f,而後只有在main()方法呼叫getFirst()方法時, f才會被例項化。為了觀察方便,在First類中寫了toString()方法,當列印First類的物件時,會預設輸出“I am indexed”。
值得注意的是:toString()方法一定要設成public。同時getFirst()中的return語句一定要在if語句之外。
練習2:(2)從Detergent中繼承產生一個新的類。覆蓋scrub()並新增一個名為sterilize()的新方法。
import static net.mindview.util.Print.*; class Cleanser { private String s = "Cleanser"; public void append(String a) { s += a; } public void dilute() { append(" dilute()"); } public void apply() { append(" apply()"); } public void scrub() { append(" scrub()"); } public String toString() { return s; } public static void main(String[] args) { Cleanser x = new Cleanser(); x.dilute(); x.apply(); x.scrub(); print(x); } } class Detergent extends Cleanser { public void scrub() { append(" Detergent.scrub()"); super.scrub(); } public void foam() { append(" foam()"); } public static void main(String[] args) { Detergent x = new Detergent(); x.dilute(); x.apply(); x.scrub(); x.foam(); print(x); print("Testing base class:"); Cleanser.main(args); } } public class Ja7_2 extends Detergent{ public void scrub(){ append("Ja7_2.scrub()"); super.scrub(); } public void sterilize(){ append("sterilize()"); } public static void main(String[] args){ Ja7_2 x=new Ja7_2(); x.dilute(); x.apply(); x.scrub(); x.foam(); x.sterilize(); print(x); print("Testing base class:"); Detergent.main(args); } }
練習5:(1)建立兩個帶有預設構造器(空引數列表)的類A和類B。從A中繼承產生一個名為C的新,並在C內建立一個B類的成員。不要給C編寫構造器。建立一個C類的物件並觀察其結果。
PS:為了自動呼叫A和B的構造器時能有print()輸出,則A()和B()方法的返回值不能是“void”,應該預設。import static net.mindview.util.Print.*; class A{ public /*void*/ A(){ print("A{}"); } } class B{ public /*void*/ B(){ print("B{}"); } } class C extends A{ B b=new B(); /*public C(){ print("C{}"); }*/ } public class Ja7_2_1{ public static void main(String[] args){ C c=new C(); } }
練習9:(2)建立一個Root類,令其含有名為Component1、Component 2、Component3的類的各一個例項(這些也由你寫)。從Root中派生一個類Stem,也含有上述各“組成部分”。所有的類都應帶有可打印出類的相關資訊的預設構造器。
import static net.mindview.util.Print.*;
class Root{
Component1 c1=new Component1();
Component2 c2=new Component2();
Component3 c3=new Component3();
public Root(){
print("root");
}
}
class Component1{
public Component1(){
print("c1");
}
}
class Component2{
public Component2(){
print("c2");
}
}
class Component3{
public Component3(){
print("c3");
}
}
class Stem extends Root{
Component1 c1=new Component1();
Component2 c2=new Component2();
Component3 c3=new Component3();
public Stem(){
print("stem");
}
}
public class Ja7_2_9{
public static void main(String[] args){
Stem st=new Stem();
}
}
/*output:
c1
c2
c3
root
c1
c2
c3
stem
* */