继承、多态、接口练习

合集下载

Java程序设计(继承与多态)期末单元测试与答案

Java程序设计(继承与多态)期末单元测试与答案

一、单选题1、Java语言中,所创建的子类都应有一个()。

A.派生类B.子类C.抽象类D.父类正确答案:D2、如果子类构造器中没有super()出现,那么编译器则会默认加上()构造器。

A.super()B.superC.thisD.this()正确答案:A3、Java中构造方法super()的使用,下列不正确的是()。

A.直接引用B.调用子类的构造函数C.引用父类成员D.调用父类的构造函数正确答案:B4、下列说法不正确的是()。

A.在同一个类中定义的重载方法可以互相调用B.构造方法允许重载C.子类无条件的调用父类无参构造方法D.子类不允许调用父类的构造方法正确答案:D5、代码如下:Employee man = new Manager(); man.test();上述代码是()的实现。

A.方法调用B.方法重写C.对象引用D.方法重载正确答案:A6、对成员的访问控制保护最强的是()。

A.缺省B.privateC.publicD.protected正确答案:B7、下列对封装性的描述中,错误的是()。

A.封装体中的属性和行为的访问权限是相同的B.封装使得抽象的数据类型提高了可重用性C.封装体包含了属性和行为D.被封装的某些信息在封装体外是不可见的正确答案:A8、在类的修饰符中,规定只能被同一包类所使用的修饰符是()。

A.abstractB.finalC.publicD.默认正确答案:D9、在Java语言中,类方法(静态方法)可以被继承,但是不能被()。

A.重载B.继承C.重写D.重构正确答案:C10、Java中,哪种是不可以用来限制存取权限的关键字()。

A.extendsB.protectedC.publicD.private正确答案:A11、不允许作为类及类成员的访问控制符的是()。

A.protectedB.staticC.privateD.public正确答案:B12、在Java中,能使派生类的功能可以被基类的方法或引用变量所调用,向后兼容,这种方法叫做()。

第七章继承多态练习题

第七章继承多态练习题

第七章继承多态一、选择题: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 bD: hello from b E: hello from ahello from a hello from b4. 运行结果是:()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. 运行结果是?()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. 分析: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;7) // insert code here8) }在第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) }哪两种改法,可以使程序通过编译? ( )A:给方法methodA()加方法体C:在Test的声明中去掉abstractB:用";"替换第5-7行D:在方法methodA()的声明中去掉abstract E: 在方法methodB()的声明中去掉abstract17. 运行结果是:()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 = falseD: b1 = false, b2 = true E: b1 = false, b2 = false21. 哪一个能通过编译?()A: new Animal().soundOff(); B: Lion l = Alpha1.get("meat eater");C: Elephant e = new Alpha1(); D: new Alpha1().get("veggie").soundOff();22. 分析:class Passenger { }class Engine { }interface TransportVehicle {void loadPassengers();}interface Helicopter extends TransportVehicle {int flyIt( String direction );}abstract class JetStream implements Helicopter { }哪种说法是正确的?()A: TransportVehicle has a Passenger. B: 类Engine在类JetStream中.C: 接口TransportVehicle可以形成多态的基础.D: 继承JetStream的非抽象类可以随意声明方法loadPassengers().23. 哪三个是"is a" 关系? ( )A:public class X { } B:public interface Shape { }public class Y extends X { } public interface Rectangle extends Shape{ }C:public interface Color { } D:public class Species { }public class Shape { private Color color; } public class Animal { private Species species; }E:public class Person { } F:interface Component { }public class Employee { class Container implementsComponent {public Employee(Person person) { } private Component[] children;} }24. 运行结果是:()public interface Test {int frood = 42;}class TestImpl implements Test {private static int frood;public static void main(String[] args) {System.out.println(++frood);}}A: 0 B: 1 C: 42 D: 43 E: 编译失败. F: 运行时异常.25. 运行结果是?()A: 5 B: 10 C: 编译失败. D: 运行时异常.26. 运行结果是:()1) public class Test {2) public static void main(String args[]) {3) class Foo {4) public int i = 3;5) }6) Object o = (Object)new Foo();7) Foo foo = (Foo)o;8) System.out.println("i = " + foo.i);9) }10) }A: i = 3 C: 第6行抛出ClassCastException异常.B: 编译失败. D: 第7行抛出ClassCastException异常.27. 分析:String s = "abcde";Object ob = (Object)s;if (ob.equals(s)) {System.out.println("AAAA");} else {System.out.println("BBBB");}if (s.equals(ob)) {System.out.println("CCCC");} else {System.out.println("DDDD");}输出哪两行? ( )A:AAAA B:BBBB C:CCCC D:DDDD二、简答题1. 简述类与类之间的关系2. 简述继承的基本概念及继承的过程3. 简述方法重写以及方法重载与方法重写的区别4. 简述super关键字的用法5. 简述重写equals方法的步骤6. 简述instanceof关键字的用法7. 简述接口和抽象类的区别8. 简述什么是多态三、编程题1. 设计一个学生类Student,包括的属性有姓名name,年龄age,学位degree。

JAVA面向对象基础测试题,继承,封装,多态等测试题

JAVA面向对象基础测试题,继承,封装,多态等测试题

JAVA面向对象基础测试题提示:本题为第一阶段,JAVA面向对象基础部分练习题,包括对象,类,继承,封装,多态,接口,内部类等等,java 核心基础,适合初学者对面向对象基础的知识进行测试,以便查漏补缺。

1.程序执行的结果是:()。

01public class Point{02int y = 7;03public void step(int y) {04y += y;05System.out.println(y);06}07public static void main(String[] args) {08Point p = new Point();09p.step(10);10}11}A.14B.20C.10D.17正确答案: B 解析:2.程序的执行结果是:()。

01public class Question {02private int num;03public static void main(String [] args){ 04Question q = new Question();05q.num=13;06update(q);07System.out.println(q.num);08}09public static void update(Question q){ 10q.num=9;11}12}A.13B.9C.0D.4正确答案: B 解析:程序执行的结果是:()。

01public class Answer {02public static void main(String[] args) {03int score = 20;04Answer ans= new Answer();05ans.add(score);06System.out.println(" main :score = " + score);07}08void add(int score) {09System.out.println(" add :score=" + score++);10}11}A.1add:score=212main:score = 21 B.1add:score=202main:score = 21 C.1add:score=212main:score = 20 D.1add:score=202main:score = 20 正确答案: D 解析:3.下列代码编译或运行的结果是:()。

Java实验报告继承、多态、接口和异常处理

Java实验报告继承、多态、接口和异常处理

Java实验报告继承、多态、接⼝和异常处理实验5 继承、多态、接⼝和异常处理⼀、实验⽬的1、掌握Java的类和对象的声明和使⽤⽅法;2、掌握Java的类的继承和实现⽅法;3、掌握多态性在类的继承中的运⽤;4、掌握接⼝的定义与使⽤;5、掌握基本异常的处理机制;6、熟悉try语句与catch语句的搭配使⽤;7、了解有异常处理与没有异常处理的差别;8、多重catch语句的使⽤;9、使⽤Throws声明异常和Throw抛出异常。

⼆、实验环境1、PC微机;2、DOS操作系统或 Windows 操作系统;3、Java sdk程序开发环境、eclipse集成环境。

三、实验内容1. 设计三个类,分别是学⽣类Student,本科⽣类UnderGraduate,研究⽣类Postjgraduate,其中Student类是⼀个抽象类,它包含学⽣的基本信息如姓名、所学课程、课程成绩等,⽽Undergraduate类和Postgraduate类都是Student类的⼦类,这两个类计算课程成绩等级的⽅法有所不同,如下表所⽰。

假设某班级⾥既有研究⽣⼜有本科⽣,编写程序统计出全班学⽣2. 和Mobilephone具体实现,并设计⼀个应⽤程序类来使⽤这些类。

3.要求设计⼀个GUI图形窗⼝程序,该程序让⽤户输⼊⼀个星期中的任意⼀天的数字1-7,然后输出该数字所对应的是星期⼏。

四、实验步骤实验内容⼀1.建⽴package experiment5_1,其最终⽬录结构如下:2.建⽴Student类:package experiment5_1;public abstract class Student {final static int CourseNo = 3;String name;String type;int[] courses;String courseGrade;public Student(String name) {/doc/1bd4a299a66e58fafab069dc5022aaea998f41e2.html = name; courses = new int[CourseNo];courseGrade = "" ;}public abstract void calculateGrade();public String getName( ) {return name;}public String getType( ) {return type ;}public String getCourseGrade( ) {return courseGrade;}public int getCourseScore(int courseNumber) {return courses[courseNumber];}public void setName(String name) {/doc/1bd4a299a66e58fafab069dc5022aaea998f41e2.html = name;}public void setType(String type) {this.type = type;}public void setCourseScore(int courseNumber, int courseScore) { //按课程索引号设置课程成绩this.courses[courseNumber] = courseScore ;}}3.建⽴外部类(1)研究⽣类Postjgraduatepackage experiment5_1;public class postgraduate extends Student {public postgraduate(String name) {super(name);type = "研究⽣";}public void calculateGrade() {// TODO Auto-generated method stubint total = 0;double average = 0;for (int i = 0; i < CourseNo; i++) {total += courses[i];};average = total / CourseNo;if (average>=90&&average<100) courseGrade = "优秀"; else if (average>=80&&average<90) courseGrade = "良好"; else if (average>=70&&average<80) courseGrade = "⼀般"; else if (average>=60&&average<70) courseGrade = "及格"; else courseGrade = "不及格";}}(2)本科⽣类UnderGraduatepackage experiment5_1;public class undergraduate extends Student {public undergraduate(String name ) {super(name);type = "本科⽣";}public void calculateGrade() {int total = 0;double average = 0;for (int i = 0; i < CourseNo; i++) {total += getCourseScore(i) ;};average = total / CourseNo;if (average>=80&&average<100) courseGrade = "优秀"; else if (average>=70&&average<80) courseGrade = "良好"; else if (average>=60&&average<70) courseGrade = "⼀般"; else if (average>=50&&average<60) courseGrade = "及格"; else courseGrade = "不及格";}}4.编写代码测试函数package experiment5_1;public class polymorphism {public static void main(String[] args) {Student[] students = new Student[5];students[0] = new undergraduate("陈建平");students[1] = new undergraduate("鲁向东");students[2] = new postgraduate("匡晓华");students[3] = new undergraduate("周丽娜");students[4] = new postgraduate("梁欣欣");for (int i=0; i<5 ;i++) {students[i].setCourseScore(0,87);students[i].setCourseScore(1,90);students[i].setCourseScore(2,78);}for (int i=0; i<5 ;i++) {students[i].calculateGrade();}System.out.println("姓名" + " 类型" +" 成绩");System.out.println("-----------------------");for (int i=0; i<5 ;i++) {System.out.println(students[i].getName( )+" "+students[i].getType( )+" "+students[i].getCourseGrade( ));}}}实验内容⼆1.建⽴package experiment5_2,其最终⽬录结构如下:2.写接⼝Soundable代码:package experiment5_2;public interface Soundable {public void increaseV olume( );public void decreaseV olume( );public void stopSound( );public void playSound( );}3.创建三个类Radio、Walkman和Mobilephone具体实现,分别添加代码:// Mobilephone类package experiment5_2;class Mobilephone implements Soundable{public void increaseV olume( ) {System.out.println("增⼤⼿机⾳量");}public void decreaseV olume( ) {System.out.println("减⼩⼿机⾳量");}public void stopSound( ) {System.out.println("关闭⼿机");}public void playSound( ) {System.out.println("⼿机发出来电铃声");}}// Walkman类package experiment5_2;class Walkman implements Soundable { public void increaseV olume( ) { System.out.println("增⼤随声听⾳量"); }public void decreaseV olume( ) { System.out.println("减⼩随声听⾳量"); }public void stopSound( ) {System.out.println("关闭随声听");}public void playSound( ) {System.out.println("随声听发出⾳乐"); }}// Radio类package experiment5_2;class Radio implements Soundable{ public void increaseV olume( ) { System.out.println("增⼤收⾳机⾳量"); }public void decreaseV olume( ) { System.out.println("减⼩收⾳机⾳量"); }public void stopSound( ) {System.out.println("关闭收⾳机");}public void playSound( ) {System.out.println("收⾳机播放⼴播"); }}4.创建people类及编写测试代码://People类package experiment5_2;class People {public void listen(Soundable s) {s.playSound( );}}//测试代码package experiment5_2;import java.util.Scanner;public class InterfaceTest {public static void main(String[] args) {int i;People sportsman = new People( );Scanner scanner = new Scanner(System.in);Soundable[] soundDevice = new Soundable[3];//往声⾳设备数组中放⼊能发声的设备soundDevice[0] = new Radio( );soundDevice[1] = new Walkman( );soundDevice[2] = new Mobilephone();System.out.println("你想听什么? 请输⼊选择:0-收⾳机1-随声听2-⼿机");i = scanner.nextInt( );//开始听声⾳sportsman.listen(soundDevice[i]);soundDevice[i].increaseV olume( );soundDevice[i].stopSound();scanner.close();}}实验内容三1.建⽴package experiment5_3,其最终⽬录结构如下package experiment5_3;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class DateTransf extends JFrame implements KeyListener{/****/private static final long serialVersionUID = 1L;private static DateTransf frm;private static JTextField txt;private static JTextField data;DateTransf() {setTitle("数字与星期转换");setLocation(700, 300);setSize(400,130);}public static void main(String[] args) {frm = new DateTransf();frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frm.setLayout(new GridLayout(2,2));txt = new JTextField(12);data = new JTextField(12);JLabel lable1 = new JLabel("输⼊数字:");JLabel lable2 = new JLabel("星期⼏:");frm.add(lable1);txt.addKeyListener(frm);frm.add(txt);frm.add(lable2);frm.add(data);frm.setVisible(true);}public void keyPressed(KeyEvent e) {if (e.getSource() == txt) {if (e.getKeyCode() == KeyEvent.VK_ENTER) // 判断按下的键是否是回车键{try {int number = Integer.parseInt(txt.getText());switch (number) {case 1:data.setText("Mon");break;case 2:data.setText("Tue");break;case 3:data.setText("Wen");break;case 4:data.setText("Thu");break;case 5:data.setText("Fri");break;case 6:data.setText("Sat");break;case 7:data.setText("Sun");break;default:JOptionPane.showMessageDialog(null, "您输⼊的数字不是1~7","⽆效⽇期",/doc/1bd4a299a66e58fafab069dc5022aaea998f41e2.html RMATION_MESSAGE); break;}}catch (Exception e1) {// TODO: handle exceptionJOptionPane.showMessageDialog(null, "您输⼊的不是整数","⽆效⽇期",/doc/1bd4a299a66e58fafab069dc5022aaea998f41e2.html RMA TION_MESSAGE); }}}}public void keyReleased(KeyEvent e) {}public void keyTyped(KeyEvent e) {}}2.编译运⾏五、实验结果●实验内容⼀结果:●实验内容⼆结果:●实验内容三结果:六、实验⼩结1.这次实验的内容⽐较多,需要掌握Java的类和对象的声明和使⽤⽅法、Java的类的继承和实现⽅法、多态性在类的继承中的运⽤、接⼝的定义与使⽤、基本异常的处理机制、try语句与catch语句的搭配使⽤等等;2. 在实验过程中,重点是要区分好实例和类,灵活掌握类的调⽤。

练习接口

练习接口

class Company { Employee[] employee; double salaries=0; Company(Employee[] employee) { this.employee=employee; } public double salariesPay() { salaries=0; 【代码4】 //计算salaries。 return salaries; } }
public class HardWork { public static void main(String args[]) { Employee[] employee=new Employee[3]; employee[0]=new WeekWorker(); employee[1]=new MonthWorker(); employee[2]=new YearWorker(); Company company=new Company(employee)司年工资总额:“+ 【代码5】 ); } }
名字getinfo功能输出nameageschool变量的值再定义主方法所在的类
继承、多态、接口
1.继承 父类----Person 变量:name,age 构造方法:Person 方法:名字——getInfo 功能——输出name,age变量的值 子类——Student 变量:school 构造方法:Student(要求用super调用父类的构造方法) 方法:名字——getInfo 功能——输出name,age,school变量的值 再定义主方法所在的类:Test 调用Person和Student类的构造方法,并调用getInfo 方法输出变量的值
3.接口 接口A:定义常量a=1;定义无返回值的方法showa 接口B:继承自接口A 定义常量b=2;定义无返回值的方法showb 接口C:定义常量c=3;定义无返回值的方法showc 接口D:继承自接口B,C 定义常量d=4;定义无返回值的方法showd 类E:实现接口D 定义常量e=5;分别实现继承来的4个show方法 showa():输出常量a的值 showb():输出常量b的值 showc():输出常量c的值 showd():输出常量d的值 showe():输出常量e的值 再定义一个主方法所在的类:Interface_H_C 将类E实例化对象ee ee分别调用showa()、showb()、showc()、 showd()、 showe()

继承、多态、接口练习

继承、多态、接口练习

总结
重写的关键字是什么? 抽象类是不是必须有抽象方法? 如果抽象类是People,子类是Employee和Manager, 下面代码是否正确
People people=new People(); People people=new Employee();√ Employee employee=new Manager();
简单工厂中用户得到的产品是父类(抽象类)对象 还是子类(实体类)对象?
接口 接口就是一组约定和规范
定义接口使用关键字interface 接口中只能有属性和方法 接口中所有属性都是公有的,没有实现的。Public省略不 写,get和set都没有是实现 接口中所有的方法都是公有抽象的。Public和abstract都省 略不写 实现接口用:,接口可以多继承 如果一个类不是抽象类,又继承了某接口,那么它必须实 现接口中所有的抽象方法。实现时,要显式地加上public。
公有的没有实现的属性 公有的抽象的方法
4、接口中public 和abstract都省略不写。
十一、用接口Figure规范化SanJiaoXing类 1、定义整型字段d、h;分别表示底和高 2、规范化d和h为属性B1和B2 3、修改构造方法 4、实现抽象方法area 知识点: 1、实现接口用: 2、实现接口的属性要显示地加上public 3、实现接口的抽象方法要显示地加上public,无须override 关键字。
初始状态
组合框点开状态
初值为
只读
选择了矩形后状态
选择了三角形后状态 只读
只读
在组合框中选择不同的形状,让不同的文本框处于可用状态。
五、制作界面
三角形面积
矩形面积
梯形面积 点击求面积按钮,则根 据组合框中选择的形状, 构造不同的形状对象, 并在多行文本区显示当 前图形对象的面积。

继承练习题

继承练习题

继承练习题一、选择题1. 关于Java中的继承说法正确的是:A. 子类可以继承父类的私有成员B. 子类可以继承父类的protected成员C. 子类可以继承父类的静态成员D. 子类不能继承父类的构造方法2. 在Java中,下列哪个关键字用于声明继承?A. extendsB. implementsC. interfaceD. class3. 如果一个类声明为final,那么它:A. 可以被继承B. 不能被继承C. 可以被实例化D. 不能被实例化4. 关于Java中的方法重写,下列说法正确的是:A. 重写的方法必须具有相同的返回类型B. 重写的方法可以有不同的访问权限C. 重写的方法可以抛出新的异常D. 重写的方法必须抛出与父类方法相同的异常5. 在Java中,下列哪个操作是不合法的?A. 子类覆盖父类的静态方法B. 子类覆盖父类的非静态方法C. 子类覆盖父类的私有方法D. 子类覆盖父类的protected方法二、填空题6. 在Java中,如果一个类没有明确指定继承哪个类,那么它默认继承______类。

7. 在Java中,使用______关键字可以实现对父类方法的重写。

8. 如果子类要调用父类的构造方法,可以使用______关键字。

9. 在Java中,子类可以______父类的成员变量和方法。

10. 在Java中,如果子类和父类都有相同的成员变量,那么在子类中访问这个变量时,默认访问的是______。

三、判断题11. 在Java中,一个类只能继承一个类,但可以实现多个接口。

()12. 子类可以继承父类的私有成员变量,但不能继承私有方法。

()13. 在Java中,子类必须显式调用父类的构造方法。

()14. 如果父类的构造方法有参数,那么子类的构造方法也必须有相同参数的构造方法。

()15. 在Java中,子类可以覆盖父类的静态方法。

()四、编程题16. 定义一个父类`Animal`,包含一个方法`makeSound()`。

java练习题答案

java练习题答案

一、填空题1、面向对象程序的主要特征:继承,__封装___,___多态_____。

2、java中的继承机制之所以能够降低程序的复杂性,提高程序的效率,主要是因为它使代码可以__重用或复用___.3、java语言中,为将源代码翻译成__字节码__文件时产生的错误称为编译错误,而将程序在运行中产生的错误称为运行错误。

4、javac是java语言中的编译器,基本语法是:javac[选项] __文件名__,java是java语言中的解释执行器,基本语法是:java[选项]___类名___.5、java语言的主要贡献者是谁James gosling二、单选题1、编译Java Application 源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为( B)。

A、javaB、.classC、htmlD、.exe2、main方法是Java Application程序执行的入口点,关于main方法的方法首部,以下(B)项是合法的。

A、public static void main()B、public static void main(String args[])C、public static int main(String[] arg)D、public void main(String arg[])三、判断1、Java语言具有较好的安全性和可移植性及与平台无关等特性。

√2、Java语言的源程序不是编译型的,而是编译解释型的。

√四、问答题1、编写、运行java程序需要经过哪些主要步骤?答:1.编写源文件,扩展名必须是.java2.编写java源程序,使用java编译器编写源文件,得到字节码文件3.运行java程序,使用javaSE平台只不过的java解释器来解释执行字节码文件。

2、阅读下列java源代码文件,并回答问题public class Speak{void speakHello(){System.out.println("I'm glad to meet you");}}class Xiti8{public static void main(String args[]){Speak sp=new Speak();sp.speakHello();}}(1)上述源文件的名字是什么?Speak.java(2)上述源文件编译后生成几个字节码文件,这些字节码文件的名字分别是什么?Speak.class Xiti8.class第2章(1)基本数据类型练习题一、填空题1、java基本数据类型中整型,字符型分别占用字节数为___4___,___2____.2、java语言中的浮点数根据数据存储长度和数值精度的不同,进一步分为_float__和__double__两种具体类型。

Java题库——Chapter11继承和多态

Java题库——Chapter11继承和多态

Java题库——Chapter11继承和多态1)Analyze the following code:public class Test {public static void main(String[ ] args) {B b = new B();b.m(5);System.out.println("i is " + b.i);}}class A {int i;public void m(int i) {this.i = i;}}class B extends A {public void m(String s) {}}A)The program has a compilation error, because m is overridden with a different signature in B.B)The method m is not overridden in B. B inherits the method m from A and defines an overloaded method m in B.C)The program has a runtime error on b.i, because i is not accessible from b.D)The program has a compilation error, because b.m(5) cannot be invoked since the method m(int) is hidden in B. B中没有重写⽅法m。

B继承了A中的⽅法m,并在B中定义了⼀个重载的⽅法m。

2)Analyze the following code.// Program 1public class Test {public static void main(String[ ] args) {Object a1 = new A();Object a2 = new A();System.out.println(((A)a1).equals((A)a2));}}class A {int x;public boolean equals(A a) {return this.x == a.x;}}// Program 2public class Test {public static void main(String[ ] args) {A a1 = new A();A a2 = new A();System.out.println(a1.equals(a2));}}class A {int x;public boolean equals(A a) {return this.x == a.x;}}A)Program 1 displays true and Program 2 displays trueB)Program 1 displays false and Program 2 displays trueC)Program 1 displays false and Program 2 displays falseD)Program 1 displays true and Program 2 displays false3)Invoking ________ removes all elements in an ArrayList x. 3) _______A)x.clear() B)x.delete() C)x.remove() D)x.empty() E)x.clean()4)Analyze the following code:Cylinder cy = new Cylinder(1, 1);Circle c = cy; 4) _______A)The code has a runtime error. B)The code has a compile error. C)The code is fine.5)Which of the following statements are true? (Choose all that apply.) 5) _______A)Overloading a method is to provide more than one method with the same name but with different signatures to distinguish them.B)A private method cannot be overridden. If a method defined in a subclass is private in its superclass, the two methods are completely unrelated.C)It is a compilation error if two methods differ only in return type in the same class.D)A static method cannot be overridden. If a static method defined in the superclass is redefined in a subclass, the method defined in the superclass is hidden.E)To override a method, the method must be defined in the subclass using the same signature and compatible return type as in its superclass.1、重载⼀个⽅法是提供多个具有相同名称但具有不同签名的⽅法来区分它们。

java多态练习题

java多态练习题

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中多态性与类型安全的关系,并给出一个示例,展示如何在多态性的情况下保持类型安全。

JAVA继承,接口,抽象类等练习

JAVA继承,接口,抽象类等练习

一、选择题1、为了区分重载多态中同名的不同方法,要求(A )。

A) 采用不同的参数列表B) 返回值类型不同C) 调用时用类名或对象名做前缀D) 参数名不同2、定义主类的类头时可以使用的访问控制符是( C)。

A) private B) protected C) public D) private protected3、下列整型的常量属性i 的定义中,正确的是( A)。

A) static final int i=100; B) final int i;C) static int i; D) final float i=1.2f;4、设x,y 均为已定义的类名,下列声明对象x1的语句中正确的是( C)。

A) public x x1= new y( ); B) x x1=x( );C) x x1=new x( ); D) int x x1;5、下列方法定义中,正确的是( D)。

A) int x( int a,b ) B) double x( int a,int b){ return (a-b); } { int w; w=a-b; }C) double x( a,b ) D) int x( int a,int b){ return b; } { return a-b; }6、为了使包sos在当前程序中可见,可以使用的语句是( A)。

A)import sos.*; B)package sos.*;C)sos import; D)sos package;7、设i、j、k 为类x 中定义的int 型变量名,下列类x 的构造函数中正确的是( )。

A) x( int m){ ... } B) void x( int m){ ... }C) x( int m, int n){ ... } D) x( int h,int m,int n){ ... }8、下列类头定义中,正确的是( )。

CA) class x B) public x extends y{ .... } { .... }C) public class x extends y D) class x extends y implements y1{ .... } { .... }9、下面是有关子类继承父类构造函数的描述,其中正确的是(C )。

第八章 继承与多态习题(C++)

第八章   继承与多态习题(C++)

第八章继承与多态习题一.基本概念与基础知识自测题8.1填空题8.1.1 如果类α继承了类β,则类α称为(1)类,而类β称为(2)类。

(3)类的对象可作为(4)类的对象处理,反过来不行,因为(5)。

如果强制转换则要注意(6)。

答案:(1)基类(2)派生类(3)派生类(4)基类(5)派生类有一些新成员(6)只能派生类强制转换为基类8.1.2 当用public继承从基类派生一个类时,基类的public成员成为派生类的(1)成员,protected成员成为派生类的(2)成员,对private成员是(3)。

公有派生可以使其类的(4),所以公有派生是主流。

答案:(1)public成员(2)protected成员(3)不可访问(4)接口不变8.1.3 利用继承能够实现(1)。

这种实现缩短了程序开发的时间,VC++中的(2)很好地体现了这一点。

答案:(1)代码的复用(2)MFC编程8.1.4 一个派生类只有一个直接基类的情况称为(1),而有多个直接基类的情况称为(2)。

继承体现了类的(3)概念,这在MFC中得到了很好表现,MFC中只采用了(4)。

答案:(1)单继承(2)多重继承(3)层次(4)单继承8.1.5 C++中多态性包括两种多态性:(1)和(2)。

前者是通过(3)实现的,而后者是通过(4)和(5)来实现的。

答案:(1)编译时的(2)运行时的(3)函数和运算符的重载(4)类继承关系(5)虚函数8.1.6 在基类中将一个成员函数说明成虚函数后,在其派生类中只要(1)、(2)和(3)完全一样就认为是虚函数,而不必再加关键字(4)。

如有任何不同,则认为是(5)而不是虚函数。

除了非成员函数不能作为虚函数外,(6)、(7)和(8)也不能作为虚函数。

答案:(1)同虚函数名(2)同参数表(3)同返回类型。

如基类中返回基类指针,而派生类中返回派生类指针是允许的(4)virtual(5)重载(6)静态成员函数(7)内联函数(8)构造函数8.1.7 纯虚函数定义时在函数参数表后加(1),它表明程序员对函数(2),其本质是将指向函数体的指针定为(3)。

实用教程习题集第4章

实用教程习题集第4章

实⽤教程习题集第4章第4章类的封装性、继承性、多态性及接⼝⼀、判断题1. 如果类A和类B在同⼀个包中,则除了私有成员外,类A可以访问类B中所有的成员。

()2. 接⼝中的成员变量全部为常量,⽅法为抽象⽅法。

()3. 抽象类可以有构造⽅法,所以能直接⽤来⽣成实例。

()4. Java的类不允许嵌套定义。

()5. 包含抽象⽅法的类⼀定是抽象类,但有abstract修饰的类不⼀定包含抽象⽅法()6. 泛型只能⽤于类的定义中,不能⽤于接⼝的定义中。

()7. ⽤final修饰的类不能被继承。

()8. 接⼝⽆构造器,不能有实例,也不能定义常量。

()9. ⼀个具体类实现接⼝时,必须要实现接⼝中的所有⽅法。

()10. 类具有封装性,但可以通过类的公共接⼝访问类中的数据。

()11. ⼦类能继承或覆盖(重写)⽗类的⽅法,但不能重载⽗类的⽅法。

()12. ⽤final修饰的⽅法不能被⼦类覆盖(重写)。

()13. abstract是抽象修饰符,可以⽤来修饰类、属性和⽅法。

()14. ⽗类的静态⽅法不能被⼦类覆盖为⾮静态的⽅法,反之亦然。

()15. ⼦类实例化时,⼦类的构造⽅法⼀定会先调⽤⽗类的构造⽅法。

()16. ⽤final修饰的⽅法不能被覆盖(重写),也不能有重载的⽅法。

()17. 接⼝也可以继承接⼝,且可以继承多个接⼝,体现了多重继承性。

()18. 假设类B继承类A,类C继承类B,则在类C中可⽤super访问类A的⽅法。

()19. 类和接⼝都可以继承另外⼀个类。

()20. 抽象类中不能包含final修饰的⽅法。

()⼆、选择题1. Java实现动态多态性是通过()实现的。

A. 重载B. 覆盖C. 接⼝D. 抽象类2. 下列哪⼀种描述是正确的?()A. 动态多态性只针对静态成员⽅法B. 动态多态性只针对⾮静态成员⽅法C. 动态多态性只针对静态成员域A. 重载⽅法的参数形式(类型、参数个数或参数顺序)必须不同B. 重载⽅法的参数名称必须不同C. 重载⽅法的返回值类型必须不同D. 重载⽅法的修饰词必须不同4. 接⼝的所有成员⽅法都具有()修饰的特性。

JAVA基础第章继承与多态练习题

JAVA基础第章继承与多态练习题

第4章继承与多态一.选择题1. 编译和运行以下两文件结果是( D )。

//文件P1.javapackage MyPackage;class P1{void afancymethod(){System.out.println("What a fancy method");}}//文件P2.javapackage YourPackage;import MyPackage.*;public class P2 extends P1{public static void main(String argv[]){P2 p2 = new P2();p2.afancymethod();}}A.两个均通过编译,P2运行时输出What a fancy methodB.没一个通过编译C.两个均通过编译,但P2运行时出错D.P1 通过编译,但P2出现编译错误2.下列程序运行的结果是(A )。

package a;package b;public class D{public static void main(String args[]) {System.out.println("^_^,今天心情不错!");}}A.出现编译错误B.^_^,今天心情不错!C.通过编译,运行时出错D.以上都不对3.Java的核心类库中哪个包,Java系统能自动引入(B )。

A.java.io B.ngC. D.java.util4.下列程序运行结果是( A )。

private class Base{Base(){int i = 100;System.out.println(i);}public class Pri extends Base{static int i = 200;public static void main(String argv[]){Pri p = new Pri();System.out.println(i);}}A.编译错误B.200 C.100 200 D.1005.下列程序运行结果是(C )。

java 继承多态接口选择题

java 继承多态接口选择题

一、前言Java 是一种面向对象的编程语言,它支持继承、多态和接口等特性。

在使用Java进行编程时,对于继承、多态和接口的理解至关重要。

本文将围绕这三个主题,提出一些选择题,以帮助读者加深对Java面向对象编程的理解。

二、继承1. 继承是Java面向对象编程的重要特性之一。

在Java中,继承通过extends关键字来实现。

以下哪些说法是正确的?a) 子类继承了父类的所有成员变量和方法b) 子类可以继承多个父类c) Java不支持多重继承d) 父类可以继承子类e) 子类可以访问父类的private成员变量和方法2. 在使用继承时,有一些注意事项需要考虑。

以下哪些说法是正确的?a) 子类可以重写父类的private方法b) 子类的构造函数默认调用父类的无参构造函数c) 父类的private成员变量和方法不会被继承d) 子类可以访问父类的protected成员变量和方法e) 继承可以增强代码的重用性和扩展性三、多态1. 多态是Java面向对象编程的另一个重要特性。

在Java中,多态通过继承和重写来实现。

以下哪些说法是正确的?a) 多态可以提高代码的灵活性和可维护性b) 子类实现了父类的多态特性c) 多态可以使代码更易于扩展和修改d) 多态可以实现接口的统一访问2. 在使用多态时,有一些需要注意的地方。

以下哪些说法是正确的?a) 父类引用可以指向子类对象b) 子类引用可以指向父类对象c) 多态不适用于静态方法d) 引用类型决定了可以调用的方法e) 多态可以提高代码的可读性和可维护性四、接口1. 接口是Java面向对象编程的另一个重要特性,它定义了一组抽象方法。

以下哪些说法是正确的?a) 接口中的方法可以有方法体b) 类可以实现多个接口c) 接口可以继承多个接口d) 接口中的方法默认是public和abstracte) 接口可以包含成员变量2. 在使用接口时,有一些需要注意的地方。

以下哪些说法是正确的?a) 实现接口的类必须实现接口中的所有抽象方法b) 接口可以继承类c) 接口可以继承接口d) 实现多个接口时,如果有重名方法则需要在实现类中进行重写e) 接口可以包含静态方法和默认方法五、结语通过以上选择题,希望读者能够加深对Java面向对象编程中继承、多态和接口的理解。

c++程序设计类的继承和多态编程题

c++程序设计类的继承和多态编程题

一、继承的意义和应用1. 继承是面向对象编程中的重要概念,它允许一个类继承另一个类的属性和方法。

2. 在C++程序设计中,继承可以减少代码重复,提高代码的复用性和可维护性。

3. 通过继承,子类可以扩展或修改父类的行为,实现代码的灵活性和可扩展性。

二、继承的语法和实现1. 在C++中,使用关键字“class”定义一个类,通过“:”符号实现继承。

2. 派生类可以继承基类的公有成员和保护成员,但不能继承基类的私有成员。

3. 在派生类中,可以通过作用域解析运算符“::”访问基类的成员。

三、多态的概念和特点1. 多态是面向对象编程中的重要特性,它允许不同类的对象对同一消息作出不同的响应。

2. 多态可以增加程序的灵活性和可扩展性,提高代码的可读性和可维护性。

3. C++中实现多态的方式包括虚函数、纯虚函数和函数重载。

四、C++中实现多态的方法1. 虚函数是实现多态的关键,通过在基类中声明虚函数,在派生类中重写虚函数实现多态。

2. 纯虚函数是一种特殊的虚函数,它没有具体的实现,只是一个接口,必须在派生类中实现。

3. 函数重载允许在同一个作用域中定义多个同名函数,根据参数的不同实现不同的行为,也可以实现多态效果。

五、继承和多态的应用场景1. 继承和多态在实际的软件开发中有着广泛的应用,例如在设计图形界面控件时,可以使用继承和多态实现不同控件的共性和个性.2. 在游戏开发中,通过继承和多态可以实现不同角色的行为和动作。

3. 在企业应用中,可以通过继承和多态实现不同部门或员工的管理和操作。

六、C++程序设计中的继承和多态案例分析1. 通过一个实际的案例,演示如何使用C++实现继承和多态。

2. 分析案例中的设计思路和代码实现,介绍继承和多态在程序设计中的作用和效果。

3. 总结案例中的经验和教训,为读者提供实践经验和指导。

七、总结1. 继承和多态是C++程序设计中的重要内容,它可以提高代码的复用性和可维护性,增加程序的灵活性和可扩展性。

java练习题继承

java练习题继承

一.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的值输出,是否提供服装津贴。

java封装继承多态选择题附加答案解析

java封装继承多态选择题附加答案解析

java封装继承多态选择题附加答案解析1. 封装的主要目的是:A. 增加代码的长度B. 隐藏实现细节C. 使所有方法都公有D. 提高程序运行速度答案: B。

解析:封装是面向对象编程的重要原则,通过将数据和方法封装在类中,隐藏内部实现细节,提高代码的可维护性和安全性。

2. 在以下选项中,哪一种方法用于实现封装?A. 使用`public`关键字定义所有成员B. 使用`private`关键字隐藏类的实现细节C. 使用`static`关键字定义所有成员D. 使用`final`关键字定义所有成员答案: B。

解析:封装是通过使用`private`关键字将类的实现细节隐藏起来,并提供公共的访问方法(getter和setter)来访问这些私有成员。

3. 在Java中,如果类B继承自类A,则下列哪个选项是正确的?A. 类B是类A的超类B. 类A是类B的子类C. 类A是类B的超类D. 类B不能有自己的方法答案: C。

解析:类A是类B的超类,类B是类A的子类。

子类可以有自己的方法和属性。

4. 在以下哪个情况下,一个方法被认为是重写了另一个方法?A. 当方法具有相同的名称但不同的参数列表时B. 当方法在子类中重新实现且具有相同的名称、返回类型和参数列表时C. 当方法在同一个类中被定义了两次时D. 当方法在类中没有定义时答案: B。

解析:方法重写发生在子类中,要求被重写的方法在子类中具有相同的方法名、返回类型和参数列表。

5. 在以下访问修饰符中,哪个是最具限制性的?A. publicB. protectedC. default(无修饰符)D. private答案: D。

解析:`private`是最具限制性的访问修饰符,只有在同一个类中可以访问。

6. 以下哪个场景中体现了多态性?A. 一个方法有多个重载版本B. 一个类有多个构造方法C. 一个子类可以使用父类的属性和方法D. 父类的引用指向子类的对象答案: D。

解析:多态性允许父类的引用指向子类的对象,实际调用的方法取决于对象的运行时类型。

python继承和多态编程题

python继承和多态编程题

Python继承和多态是面向对象编程中的重要概念,可以帮助程序员编写更加灵活和可扩展的代码。

在本文中,我们将深入探讨Python继承和多态的基本概念,并通过编程题的形式来加深对这两个概念的理解。

1. Python继承的基本概念继承是面向对象编程中的重要概念,它允许一个类(称为子类)继承另一个类(称为父类)的属性和方法。

子类可以通过继承来获得父类的属性和方法,并且可以在此基础上添加新的属性和方法。

在Python 中,继承可以通过在子类定义时在类名后面加上父类的名称来实现。

例如:```pythonclass Animal:def __init__(self, name): = namedef make_sound(self):passclass Dog(Animal):def make_sound(self):print("汪汪汪")```在上面的例子中,我们定义了一个Animal类和一个Dog类,Dog类继承了Animal类的属性和方法,并且重新实现了make_sound方法。

2. Python多态的基本概念多态是面向对象编程中的另一个重要概念,它允许不同的子类对象对同一个方法做出不同的响应。

在Python中,多态可以通过方法的重写和方法的重载来实现。

方法的重写指的是子类重新实现了父类的方法,而方法的重载指的是在不同的子类中实现了同名的方法。

通过多态,我们可以编写出更加灵活和可扩展的代码。

3. 编程题接下来,我们将通过编程题的形式来加深对Python继承和多态的理解。

请编写一个程序,包含以下几个类:(1)Animal类,包含属性name和方法make_sound,方法make_sound打印出“动物发出叫声”的信息。

```pythonclass Animal:def __init__(self, name): = namedef make_sound(self):print("动物发出叫声")(2)Dog类,继承自Animal类,重载方法make_sound,方法make_sound打印出“汪汪汪”的信息。

java封装继承多态作业题

java封装继承多态作业题

下面是一个关于Java封装、继承和多态的作业题,可供学习和练习。

题目:学生管理系统
编写一个简单的Java程序,模拟一个学生管理系统。

系统应该包括以下类:
Student类:
属性:学生姓名、学号、年龄、成绩
方法:构造函数、获取学生信息的方法、设置学生信息的方法
Course类:
属性:课程名称、课程编号、授课老师
方法:构造函数、获取课程信息的方法、设置课程信息的方法
Teacher类:
属性:老师姓名、工号、教授课程
方法:构造函数、获取老师信息的方法、设置老师信息的方法
School类:
属性:学校名称、地址、联系电话
方法:构造函数、获取学校信息的方法、设置学校信息的方法
Main类:
创建几个学生对象、课程对象和老师对象,并分别设置它们的信息。

使用多态性质,创建一个列表或数组,存储不同的学生、课程和老师对象,然后通过循环遍历输出它们的信息。

要求:
使用封装的原则,将类的属性设置为私有,并提供公共的访问和修改方法。

使用继承的原则,确保子类可以继承父类的属性和方法。

使用多态的原则,通过父类的引用来操作子类对象。

这个作业题可以帮助学习者理解Java中的封装、继承和多态的概念,并将其应用到一个实际的项目中。

学生可以根据自己的理解和知识水平来扩展这个项目,添加更多的功能和类。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
封装:隐藏内部实现,稳定外部接口 继承:子类继承父类成员,实现代码复用 多态:不同子类对同一个消息作出不同的反映 abstract 抽象方法和抽象类的关键字什么? 重写方法的关键字是什么? override 虚方法的关键字是什么? virtual
抽象类和抽象方法的使用规则
抽象类只能作为其它类的基类,它不能直接被实例化。它只 能作为基类使用。 抽象类中可以存在非抽象的方法,抽象方法必须包含在抽象 类中。 实现抽象方法用override关键字。如果子类没有实现抽象基 类中所有的抽象方法,则子类也必须定义成一个抽象类。
总结
重写的关键字是什么? 抽象类是不是必须有抽象方法? 如果抽象类是People,子类是Employee和Manager, 下面代码是否正确
People people=new People(); People people=new Employee();√ Employee employee=new Manager();
接口和抽象类的区别
接口 不同 点
关键字:interface 多个继承
抽象类
关键字:abstract 单一继承
子类必须实现接口的所有成员
子类只要实现抽象方法, 要override关键字实现
相同 点
不能实例化 包含只声明,未实现的方法 子类必须实现未实现的方法 用接口或抽象类实例化子类时,不能调用子类自己和继承自 其它接口的属性与方法。
4、普通方法一个
public string area() 返回图形的面积没有定义。
知识点: 1、会定义类、构造方法和普通方法。 2、理解类中只能有字段、属性和方法,不能有其他内容。 3、理解为什么要使用属性,属性的作用是什么? 4、为什么我们一般要把不带参数的构造方法也写上?
派生子类
二、定义Figure的子类SanJiaoXing,包含如下的内容 1、构造方法两个
一个不带参数的构造方法 一个有两个参数的构造方法,可以给b1,b2赋值
2、重写父类的area方法,
返回矩形的面积是B1*B2
知识点: 1、一个类可以派生很多子类,但是一个类只能有 一个父类。
派生子类
四、定义Figure的子类TiXing,包含如下的内容 1、整型字段h,表示梯形的高。并封装得到属性H 1、构造方法两个
十二、用接口Figure规范化JuXing类 1、定义整型字段chang、kuan;分别表示长和宽 2、规范化chang和kuan为属性B1和B2 3、修改构造方法 4、实现抽象方法area 十三、用接口Figure规范化TiXing类 1、定义整型字段shang、xia、gao;分别表示上底、下底 和高 2、规范化shang和xia为属性B1和B2 3、修改构造方法 4、实现抽象方法area
一个不带参数的构造方法 一个有三个参数的构造方法,可以给b1,b2,h赋值
2、重写父类的area方法,
返回梯形的面积是(B1+B2)*h/2
知识点: 1、子类可以继承父类的特征,也可以有父类没有的特征, 如h;还可以对父类的东西进行修改以适应自己的需要, 如area方法。
五、制作界面----制作如下的界面
简单工厂的使用
六、在项目中建一个图形工厂类:FigFactory 1、内有一个公有的静态的方法,可以根据用户的 需求返回各种图形的对象 public static Figure SCFig(string name,int a,int b,int c) {
根据name判断是一种什么图形(三角形、矩形还是梯 形) 使用a、b、c实例化对象
第五、七章
继承、多态、接口练习
新建一个winforms窗体应用程序的项目。并完成 以下的工作。
定义类
一、定义一个Figure类,包含如下的内容: 1、整型字段:b1,b2; 2、将字段封装得到相应的属性B1、B2 3、构造方法两个
一个没有参数的构造方法 一个有两个参数的构造方法,可以给b1、b2赋值。
抽象类的ห้องสมุดไป่ตู้用
九、修改SanJiaoXing、JuXing、TiXing类,使之 继承抽象的Figure类,并实现抽象的area方法。
在这个过程中,无须做任何修改。
知识点: 如果子类不是抽象类,那么子类必须实现父类的 抽象方法。 对于父类(如步骤一中的Figure类)中的虚方法,子类 如果需要,可以重写,如果不需要,不重写也是 可以的。
运行程序,查看结果,体会抽象类的用法 保存项目为(作业3)
接口的用法
十、修改Figure类为接口,内有: 1、两个整型属性:B1,B2 2、抽象方法string area(); 知识点: 1、接口就是一组规范。用来将一组相关联的事物规范化,以方便使 用。 2、定义接口用interface关键字 3、接口中只能有
运行程序,查看结果,体会接口的用法 保存项目为(作业4) 知识点: 1、接口用来规范化子类 2、接口的引用也可以指向子类的实例 3、一个类可以继承多个接口,接口之间用逗号隔开 4、一个类可以继承一个类并实现多个接口,这时需要先 写父类的名字,再写接口的名字,中间用逗号隔开
小结
面向对象的三大特性是什么?
初始状态
组合框点开状态
初值为0
只读
选择了矩形后状态
选择了三角形后状态 只读
只读
在组合框中选择不同的形状,让不同的文本框处于可用状态。
五、制作界面
三角形面积
矩形面积
梯形面积 点击求面积按钮,则根 据组合框中选择的形状, 构造不同的形状对象, 并在多行文本区显示当 前图形对象的面积。
知识点:
1、父类的引用可以指向子类的实例。反之不可。 2、体会多态性。 保存项目为(作业1)
抽象类的使用
八、修改Figure类为抽象类 1、将Figure类中的area方法的方法体去掉,那么, area就变成了抽象方法 2、Figure类就是抽象类 知识点: 1、如果一个方法没有方法体(因为功能无法或很难实 现),那么这个方法就是抽象方法。 2、含有抽象方法的类就是抽象类 3、抽象类不能实例化,通常用来作为父类。
一个不带参数的构造方法 一个有两个参数的构造方法,可以给b1,b2赋值
2、重写父类的area方法,
返回三角形的面积是B1*B2/2
知识点: 1、如何实现继承,子类可以继承父类的那些成员? 2、base的用法 3、什么是重写?要用到哪两个关键字?
派生子类
三、定义Figure的子类JuXing,包含如下的内容 1、构造方法两个
}
七、在Form1.cs中,当点击“求面积”按钮时,调 用图形工厂得到图形对象,并将该对象的面积显 示到多行文本区中。 保存项目为(作业2)
简单工厂
简单工厂是一种设计模式 设计模式的意义。
提供软件的可复用性 灵活适应软件设计的变化 面向对象思想在实际应用中的集中体现
如果我们什么时候需要某对象,不再是我们自己考 虑如何构造,而是去找相应的工厂给我们构造,我 们只需要向工厂提出我们的要求就可以了。符合我 们的实际生活习惯。
公有的没有实现的属性 公有的抽象的方法
4、接口中public 和abstract都省略不写。
十一、用接口Figure规范化SanJiaoXing类 1、定义整型字段d、h;分别表示底和高 2、规范化d和h为属性B1和B2 3、修改构造方法 4、实现抽象方法area 知识点: 1、实现接口用: 2、实现接口的属性要显示地加上public 3、实现接口的抽象方法要显示地加上public,无须override 关键字。
简单工厂中用户得到的产品是父类(抽象类)对象 还是子类(实体类)对象?
接口 接口就是一组约定和规范
定义接口使用关键字interface 接口中只能有属性和方法 接口中所有属性都是公有的,没有实现的。Public省略不 写,get和set都没有是实现 接口中所有的方法都是公有抽象的。Public和abstract都省 略不写 实现接口用:,接口可以多继承 如果一个类不是抽象类,又继承了某接口,那么它必须实 现接口中所有的抽象方法。实现时,要显式地加上public。
相关文档
最新文档