第七章继承多态练习题
- 格式:doc
- 大小:226.00 KB
- 文档页数:10
java继承练习题Java中的继承是面向对象编程中的重要概念,它允许我们创建一个类(称为子类或派生类),继承另一个类(称为父类或基类)的属性和方法。
通过继承,子类可以利用父类的代码,从而实现代码的复用和扩展。
本文将介绍一些Java继承的练习题,以帮助读者加深对继承的理解和应用。
1. 继承基本概念题(1)什么是继承?为什么使用继承?(2)Java中如何定义一个继承关系?(3)继承的优缺点是什么?2. 继承的语法练习题假设有两个类:Person和Student。
Person类具有以下属性和方法:```public class Person {protected String name;protected int age;public Person(String name, int age) { = name;this.age = age;public void introduce() {System.out.println("My name is " + name + ", I am " + age + " years old.");}}```Student类继承自Person类,并具有自己的属性和方法:```public class Student extends Person {private String school;public Student(String name, int age, String school) {super(name, age);this.school = school;}public void study() {System.out.println("I am studying at " + school + ".");}}请编写一个Java程序,创建一个Student对象,并调用introduce()和study()方法。
java多态练习题Java多态是一种允许不同类的对象对同一消息做出响应的机制,主要通过继承和接口实现。
以下是一些Java多态的练习题,旨在帮助学生更好地理解和掌握Java多态的概念。
1. 理解多态的概念- 描述什么是Java中的多态性,并给出一个简单的例子。
2. 多态的实现方式- 列出Java中实现多态的两种主要方式,并解释它们的区别。
3. 重载与重写- 解释方法重载(overloading)和方法重写(overriding)的概念,并给出一个例子,展示如何使用它们来实现多态。
4. 向上转型- 给出一个代码示例,展示如何通过向上转型来实现多态。
5. 接口与抽象类- 解释接口和抽象类在实现多态中的作用,并给出一个使用接口实现多态的例子。
6. 动态绑定- 描述动态绑定的概念,并解释它是如何与多态性相关联的。
7. 多态与继承- 编写一个Java程序,展示继承如何与多态性一起工作,创建一个基类和几个派生类,然后使用基类引用来调用派生类的方法。
8. 多态与数组- 编写一个Java程序,展示如何使用多态性将不同类型的对象存储在同一个数组中。
9. 多态与方法调用- 编写一个Java程序,展示如何使用多态性在运行时调用正确的方法。
10. 多态与构造函数- 编写一个Java程序,展示如何在多态性的情况下调用构造函数。
11. 多态与异常处理- 编写一个Java程序,展示如何在多态性的情况下使用异常处理。
12. 多态与泛型- 编写一个Java程序,展示如何结合使用多态性和泛型。
13. 多态与设计模式- 描述多态性如何在设计模式中发挥作用,并给出一个使用设计模式实现多态性的例子。
14. 多态与性能- 讨论多态性对Java程序性能的潜在影响,并给出优化多态性使用的建议。
15. 多态与反射- 描述反射机制如何与多态性结合使用,并给出一个使用反射实现多态性的例子。
16. 多态与类型安全- 讨论Java中多态性与类型安全的关系,并给出一个示例,展示如何在多态性的情况下保持类型安全。
9、Java面向对象之继承和多态作业题Java面向对象之继承和多态作业题2021/9/23? 上机要求:使用Eclipse编写主题类、回复类要求如下:主题类继承帖子类,并增加属性:主题id,版块id 回复类继承帖子类,并增加属性:回复id,主题id 在帖子类中实现多态使用super调用父类构造方法? 阶段一:? 需求说明:? 创建主题类,继承帖子类类名 Topic 属性 topicId:int boardId:int 继承类名 Tip 属性 title:String content:String publishTime:String uid:int 方法 getInfo() :void实现思路及关键代码:1、创建主题类:Topic,继承帖子类:Tip2、增加以下属性主题id:int topicId 版块id:int boardId3、添加setter/getter方法4、使用从帖子类继承来的getInfo()方法,输出主题信息 packagecom.workit.part3; public class Topic { private int topicId; private int boardTd; public Topic(int topicId, int boardTd) { super(); this.topicId = topicId; } } this.boardTd = boardTd; package com.workit.part3; public class Tip extends Topic { publicTip(int topicId, int boardTd) { } private String title; private String content; private String publishTime; public String getTitle() { } public void setTitle(String title) { } public String getContent() { } public void setContent(String content) { } public String getPublishTime() { } public void setPublishTime(String publishTime) { } public void title(){ System.out.println(\帖子标题:\\t\); } public void content(){ System.out.println(\帖子内容:\\t\); } public void publishTime(){ System.out.println(\发帖时间:\\t\); } this.publishTime = publishTime;return publishTime; this.content = content; return content; this.title = title; return title; super(topicId, boardTd); // TODO Auto-generated constructorstub }? 阶段二:需求说明:1、创建回复类:Reply ,继承帖子类:Tip2、增加以下属性回复id:intreplyId 主题id:int topicId3、添加setter/getter方法4、使用从帖子类继承来的getInfo()方法,输出回复信息 packagecom.workit.part3; public class Reply { } package com.workit.part3; private int topicId; private int boardId; private int replyId; public int setTopicId(int topicId) { } public void getTopicId() { } public int setBoardId(int boardId) { } public void getBoardId() { } publicint setReplyId(int replyId) { } public void getReply() { } this.replyId = replyId; return replyId; this.boardId = boardId; return boardId; this.topicId= topicId; return topicId; public class Tip2 extends Reply{ } private String title; privateString content; private String publishTime; public String setTitle(Stringtitle) { } public void getTitle() { } public String setContent(String content) { } public void getContent() { } public StringsetpublishTime(String publicTime) { } public void getpublishTime() { }public void title() { System.out.println(\帖子标题:\\t\+this.title); }public void content() { System.out.println(\帖子内容:\\t\+this.content); } public void pudlishTime() { System.out.println(\发帖时间:\\t\+this.publishTime); } this.publishTime = publishTime; return publicTime; this.content = content; return title; this.title = title; return title;? 阶段三:? 需求说明:? 主题类、回复类重写帖子类输出信息的方法 ? 实现思路及关键代码:? 1、主题类重写getInfo()方法,输出主题信息 ? 2、回复类重写getInfo()方法,输出回复信息 ? 3、在测试类中使用多态的方式调用getInfo()方法package com.workit.part3; public class Reply { private int topicId; private int boardId; private int replyId; public int getTopicId() { } public void setTopicId(int topicId) { } public int getBoardId() { } return boardId; this.topicId = topicId; return topicId;感谢您的阅读,祝您生活愉快。
java 继承练习题Java 继承练习题Java 是一种面向对象的编程语言,继承是其核心概念之一。
通过继承,我们可以创建新的类,并从现有的类中继承属性和方法。
继承不仅提高了代码的可重用性,还使得代码更加易于维护和扩展。
在本文中,我们将通过一些练习题来巩固和加深对 Java 继承的理解。
1. 创建一个 Animal 类,具有属性 name 和 age,以及方法 eat() 和 sleep()。
然后创建一个 Dog 类,继承自 Animal 类,并添加一个方法 bark()。
最后创建一个 Cat 类,也继承自 Animal 类,并添加一个方法 meow()。
在主函数中创建一个 Dog 对象和一个 Cat 对象,并调用它们的方法。
2. 创建一个 Shape 类,具有属性 color 和 filled,以及方法 getArea() 和getPerimeter()。
然后创建一个 Circle 类,继承自 Shape 类,并添加一个属性radius,以及重写的方法 getArea() 和 getPerimeter()。
最后创建一个 Rectangle 类,也继承自 Shape 类,并添加属性 width 和 height,以及重写的方法getArea() 和 getPerimeter()。
在主函数中创建一个 Circle 对象和一个 Rectangle 对象,并调用它们的方法。
3. 创建一个 Person 类,具有属性 name 和 age,以及方法 eat() 和 sleep()。
然后创建一个 Student 类,继承自 Person 类,并添加属性 grade,以及重写的方法 eat() 和 sleep()。
最后创建一个 Teacher 类,也继承自 Person 类,并添加属性 subject,以及重写的方法 eat() 和 sleep()。
在主函数中创建一个 Student 对象和一个 Teacher 对象,并调用它们的方法。
一.extends和super的使用和方法的重写1.定义一个人的类(属性有名字,年龄。
写一个能输出各个属性值的方法showInfo()),定义一个学生类(属性有性别),学生继承人类要求:(1)父类的属性赋值用构造方法来实现(分别用有参数构造方法和无参数构造方法实现)(2)子类的属性也用构造方法来赋值.(3)在子类中重写父类的showInfo()方法(4)声明学生类的对象,调用学生的显示信息的方法。
2定义Animal父类,含有属性name,sex,age,方法sleep,run,编写一个子类Person,继承Animal类,然后调用父类的属性和方法二.1、试编写三个具有继承关系的类,A、B、C(B继承A,C继承B)。
要求A中包含方法a1()、a2(),B类中的方法b1()访问了a1()和a2(),C类中的方法c1()访问了a1()、a2()、b1()。
提示:(a1(),a2(),b1(),c1()这些方法体除了实现题目要求之外,其余内容可以任意编写。
)2、请编码实现动物世界的继承关系:动物(Animal)具有行为:吃(eat)、睡觉(sleep)动物包括:兔子(Rabbit),老虎(Tiger)这些动物吃的行为各不相同(兔子吃草,老虎吃肉);但睡觉的行为是一致的。
请通过继承实现以上需求,并编写测试类AnimalTest进行测试。
3、父类Person 包含like()方法子类Son 重写父类方法并打印输出4、(选做)父类Employee 属性:name、sex ,带一个构造方法Employee(String n,char s)子类Worker继承自Employee 属性:char category;//类别boolean dressAllowance;//是否提供服装津贴,有一个构造方法负责构造所有属性,还有一个自定义方法isDressAll()这个方法负责通过判断dressAllowance的值输出,是否提供服装津贴。
第七章继承多态练习题 1 / 10 第七章继承多态 一、选择题: 1、分析: class A { A() { } } class B extends A { //系统自动生成的构造方法和类的访问权限一样 } 哪两种说法是正确的? ( ) A:类B的构造方法是public的. B:类B的构造方法包含对this()的调用. C:类B的构造方法没有参数. D:类B的构造方法包含对super()的调用. 2、运行结果是:( ) class Base { Base() { System.out.print("Base"); } } public class Alpha extends Base { public static void main( String[] args ) { new Alpha(); new Base(); } } A: Base B: BaseBase C: 编译失败. D: 没有输出. E: 运行时异常. 3. 程序的运行结果是?( )
A: 编译失败. B: hello from a C: hello from b D: hello from b E: hello from a hello from a hello from b 第七章继承多态练习题 2 / 10 4. 运行结果是:( ) class TestSuper { TestSuper(int i) { } } class TestSub extends TestSuper{ } class TestAll { public static void main (String [] args) { new TestSub(); } } A: 编译失败. B: 程序运行没有异常. C: 第7行抛出异常. D: 第2行抛出异常.
5. 程序的运行结果是?( )
A: 0 B: 1 C: 2 D: 编译失败. 6. 对于语句"B is a D" 和 "B has a C",一下哪两种说法是正确的? ( ) A:D是B. B:B是D. C:D是C. D:B是C. E:D继承 B. F:B 继承D. 7. 运行结果是?( ) 第七章继承多态练习题
3 / 10 A: 1 B: 2 C: 第8行编译失败. D: 第14行编译失败. 8. 分析: public class ConstOver { public ConstOver(int x, int y, int z) { } } 哪两个是对ConstOver 的构造方法的重载? ( ) A:ConstOver() { } B:protected int ConstOver() { } C:private ConstOver(int z, int y, byte x) { } D:public Object ConstOver(int x, int y, int z) { } E:public void ConstOver(byte x, byte y, byte z) { }
9. 运行结果是?( )
A: 4,4 B: 4,5 C: 5,4 D: 5,5 E: 编译失败. 10. 分析: 第七章继承多态练习题 4 / 10 public class X { public X aMethod() { return this;} } 1) public class Y extends X { 2) 3) } 在第2行可以插入哪两项? ( ) A:public void aMethod() { } B:private void aMethod() { } C:public void aMethod(String s) { } D:private Y aMethod() { return null; } E:public X aMethod() { return new Y(); }
11. 运行结果是?( )
A: 4,4 B: 4,5 C: 5,4 D: 5,5 E: 编译失败. 12. 以下哪两个重载了方法setVar()? ( ) public class MethodOver { public void setVar(int a, int b, float c) { } } A:private void setVar(int a, float c, int b) { } B:public int setVar(int a, float c, int b) {return a;} C:protected void setVar(int a, int b, float c) { } D:public int setVar(int a, int b, float c) {return a;} E:protected float setVar(int a, int b, float c) {return c;}
13. 分析: 1) class BaseClass { 2) private float x = 1.0f; 3) protected void setVar(float f) { x = f; } 4) } 5) class SubClass extends BaseClass { 6) private float x = 2.0f; 第七章继承多态练习题 5 / 10 7) // insert code here 8) } 在第7行插入哪两个覆盖了方法setVar()? ( ) A:void setVar(float f) { x = f; } B:public void setVar(int f) { x = f; } C:public void setVar(float f) { x = f; } D:public double setVar(float f) { return f; } E:public final void setVar(float f) { x = f; } F:protected float setVar() { x = 3.0f; return 3.0f; }
14. 运行结果是?( )
A: 1 B: 2 C: 运行时异常. D: 第8行编译错误. E: 第14行编译错误.
15. 分析: class A { protected int method1(int a, int b) { return 0; } } 在A的子类中,以下哪两个方法是合法的? ( ) A:public int method1(int a, int b) { return 0; } B:private int method1(int a, long b) { return 0; } C:private int method1(int a, int b) { return 0; } D:public short method1(int a, int b) { return 0; } E:static protected int method1(int a, int b) { return 0; } 16. 分析: 1) public abstract class Test { 2) public abstract void methodA(); 3) 4) public abstract void methodB() 5) { 6) System.out.println("Hello"); 7) } 8) } 第七章继承多态练习题 6 / 10 哪两种改法,可以使程序通过编译? ( ) A:给方法methodA()加方法体 C:在Test的声明中去掉abstract B:用";"替换第5-7行 D:在方法methodA()的声明中去掉abstract E: 在方法methodB()的声明中去掉abstract
17. 运行结果是:( ) 1) abstract class AbstractIt { 2) abstract float getFloat(); 3) } 4) public class AbstractTest extends AbstractIt { 5) private float f1 = 1.0f; 6) private float getFloat() { return f1; } 7) } A: 编译成功. B: 运行时异常. C: 第2行编译失败. D: 第6行编译失败.
18. 在接口中哪两个方法的声明是合法的? ( ) A:void method1(); B:public void method2(); C:static public void method5(); D:protected void method3(); E:final public void method4();
19. 分析: 1) public interface Foo { 2) int k = 4; 3) } 哪三项与第2行等价? ( ) A:final int k = 4; B:public int k = 4; C:static int k = 4; D:abstract int k = 4; E:volatile int k = 4; F:protected int k = 4;
20. 分析: interface Inter { } class A implements Inter { } class B extends A { B() { A[] arr = new A[10]; boolean b1 = this instanceof Inter; boolean b2 = arr instanceof Object; System.out.println("b1 = " + b1 + ", b2 = " + b2); } } 创建B的对象时会输出?( ) A: 编译失败. B: b1 = true, b2 = true C: b1 = true, b2 = false D: b1 = false, b2 = true E: b1 = false, b2 = false
21. 哪一个能通过编译?( )