Java-Java编程思想第四版 第七章 练习
2018-02-06 16:55
387 查看
练习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类的对象并观察其结果。
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(); } }PS:为了自动调用A和B的构造器时能有print()输出,则A()和B()方法的返回值不能是“void”,应该缺省。
练习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 * */
相关文章推荐
- Java-Java编程思想第四版 第七章 练习(2)
- Java-Java编程思想第四版 第十一章 练习
- Java-Java编程思想第四版 第九章 练习
- Java编程思想第四版第七章练习
- Java-Java编程思想第四版 第十三章 练习
- Java-Java编程思想第四版 第八章 练习
- Java编程思想第四版*第七章*个人练习
- Java-Java编程思想第四版 第十五章 练习
- Java-Java编程思想第四版 第十章 练习
- Java-Java编程思想第四版 第九章 练习
- Java-Java编程思想第四版 第十六章 数组 练习
- Java-Java编程思想第四版 第十二章 练习
- Java-Java编程思想第四版 第十四章 练习
- JAVA编程思想第四版-多线程的练习答案之练习18
- Java编程思想(第四版)*第二章 个人练习
- JAVA编程思想第四版-多线程的练习答案之练习19
- JAVA编程思想第四版-多线程的练习答案之练习20
- Java编程思想第四版第二章练习
- Java编程思想第四版 第三章个人练习
- JAVA编程思想第四版-多线程的练习答案之练习17