第6章继承与多态思考题与习题一、概念思考题1.父类和子类之间的关系是怎样的?解答:是继承关系,子类继承父类。有public,protected,private三种继承方式。2.继承如何支持了软件重用?解答:在继承中,新的类是基于一个已经存在的基础雷尔定义出来的,通过继承,新的类自动获得了基础类中的所有成员,包括成员变量、方法和各种访问属性的成员,无论时public还是private。在继承后,程序员还可以加入自己定义的新的成员,包括变量和方法。通过继承来定义新的类,远比从头开始写一个新的类要简单快捷和方便,以上便是对代码的重用。3.protected的含义是什么?解答:含义:只有包内其他类、自己和子类可以访问。4.super有什么作用?解答:super表示超类或父类,其只能在子类中使用,可以访问父类中的实例变量、实例方法、还可以访问父类的构造方法(这个super()必须写在构造方法的第一行,而且每个构造方法只能有一个super())。5.interface与class有什么异同之处?解答:相同点:1)都可以定义抽象方法;2)都不能实例化对象;3)定义的抽象方法都需要被重写;4)都可以定义publicstatic方法,publicstaticfinal常量。不同点:1)意义不同抽象类是对事物更高层级的抽象;接口是对功能的封装。2)定义方式不同抽象类用abstractclass定义;接口用interface定义。3)内容不同抽象类中除了抽象方法外,还可以定义构造方法等普通类中定义的所有成员。接口除了publicabstract方法,publicstaticfinal常量,publicstatic方法,publicdefault方法等这四个内容外,不能定义构造方法等内容4)使用方式不同抽象类需要被子类extends继承;接口需要被实现类implements实现。5)类只支持单继承,接口支持多继承。6)应用场景不同一般情况下,对类进行功能的扩展,优先选择接口。除了扩展功能外,还需要保存不同的数据,只能选择抽象类;抽象类的抽象方法需要子类重写,抽象类还可以约束所有的子类都具有相同的功能。6.覆盖与重载有什么关系?解答:--方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系--覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系。--覆盖要求参数列表相同;重载要求参数列表不同。--覆盖关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)来决定;重载关系,是根据调用时的实参表与形参表来选择方法体的。7.Java缺省使用何种绑定方式?解答:动态绑定,缺省意味着它不属于程序执行前的编译阶段确定的绑定。8.什么样的方法会被静态绑定调用?解答:final、static、private等方法在程序执行前已经被绑定,也就是说在编译过程中就已经知道这个方法是哪个类的方法,故这三种方法会被静态绑定调用。9.绑定方式是由方法自身所决定的还是在调用方法的时候决定的?解答:方法自身所决定的,不同的方法在编译时决定了不同的绑定类型。二、程序理解题1.写出下面程序的输出结果。classA{publicintdata=5;publicvoidprint(){System.out.println(data);}}classBextendsA{publicintdata=2;publicvoidprint(){System.out.println(data);}}publicclassTestAB{publicstaticvoidmain(String[]args){Aa=newB();a.print();System.out.println(a.data);}}解答:252.写出以下程序的运行结果publicclassA{publicvoidm(inti){System.out.println(10);}}publicclassBextendsA{publicvoidm(intk){System.out.println(20);}publicstaticvoidmain(String[]args){Ap1=newA();Bp2=newB();p1.m(1);p2.m(2);}}解答:1020三、编程题1.设计一个程序,表达各种读物,如小说、杂志、期刊、课本等,每种读物有相同的属性,如页数、价格等,也有不同的属性,如杂志和期刊都有出版周期,而课本有适合对象。写一个测试类的main()来产生一系列随机的读物,并输出它们的信息。解答:packagework06;//抽象类book,方法abstractclassBook{//共同属性intpages;//页数doubleprice;//价格publicabstractvoidInfo();}//小说类classFictionextendsBook{publicFiction(intpages,doubleprice){this.pages=pages;this.price=price;}publicvoidInfo(){System.out.println(Thisisafiction,whichhas+pages+pages,+costs+price+yuan.);}}//杂志类classMagazingextendsBook{privateStringpublishing_time;//出版时间publicMagazing(intpages,doubleprice,Stringpublishing_time){this.pages=pages;this.price=price;this.publishing_time=publishing_time;}publicvoidInfo(){System.out.println(Thisisamagazine,whichhas+pages+pages,+costs+price+yuan,andpublishonceevery+publishing_time+.);}}//期刊类classJournalextendsBook{privateStringpublishing_time;//出版时间publicJournal(intpages,doubleprice,Stringpublishing_time){this.pages=pages;this.price=price;this.publishing_time=publishing_time;}publicvoidInfo(){System.out.println(Thisisajournal,whichhas+pages+pages,+costs+price+yuan,andpublishonceevery+publishing_time+.);}}//课本类classTextbookextendsBook{privateStringapplicable_object;//适用对象publicTextbook(intpages,doubleprice,Stringapplicable_object){this.pages=pages;this.price=price;this.applicable_object=applicable_object;}publicvoidInfo(){System.out.println(Thisisatextbook,whichhas+pages+pages,+costs+price+yuan,andapplicablefor+applicable_object+.);}}publicclassTest{publicstaticvoidmain(String[]args){Fictionf=newFiction(199,12);f.Info();Magazingm=newMagazing(3,30,6months);m.Info();Journalj=newJournal(274,36,3years);j.Info();Textbookt=newTextbook(187,10.19,students);t.Info();}}2.将上题中的基础类“读物”改写成一个接口,并修改相应的代码。解答:packagework06;//读物接口interfaceBook{publicvoidInfo();}//小说类classFictionimplementsBook{doubleprice;//价格intpages;//页数publicFiction(intpages,doubleprice){this.pages=pages;this.price=price;}//实现接口方法Info()publicvoidInfo(){System.out.println(Thisisafiction,whichhas+pages+pages,+costs+price+yuan.);}}//杂志类classMagazineimplementsBook{doubleprice;//价格intpages;//页数Stringpublish_time;//出版时间//构造方法publicMagazine(intpages,doubleprice,Stringpublish_time){this.pages=pages;this.price=price;this.publish_time=publish_time;}//实现接口方法Info()publicvoidInfo(){System.out.println(Thisisamagazine,whichhas+pages+pages,+costs+price+yuan,andpublishonceevery+publish_time+.);}}//期刊类classJournalimplementsBook{doubleprice;//价格intpages;//页数Stringpublish_time;//出版时间publicJournal(intpages,doubleprice,Stringpublish_time){this.pages=pages;this.price=price;this.publish_time=publish_time;}//实现接口方法Info()publicvoidInfo(){System.out.println(Thisisajournal,whichhas+pages+pages,+costs+price+yuan,andpublishonceevery+publish_time+.);}}//课本类classTextbookimplementsBook{Stringapplicable_object;//适用对象doubleprice;//价格intpages;//页数publicTextbook(intpages,doubleprice,Stringapplicable_object){this.pages=pages;this.price=price;this.applicable_object=applicable_object;}//实现接口方法Info()publicvoidInfo(){System.out.println(Thisisatextbook,whichhas+pages+pages,+costs+price+yuan,andapplicablefor+applicable_object+.);}}publicclassTest{publicstaticvoidmain(String[]args){Fictionf=newFiction(199,12);f.Info();Magazinem=newMagazine(3,30,6months);m.Info();Journalj=newJournal(274,36