继承、多态、接口练习
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 核心基础,适合初学者对面向对象基础的知识进行测试,以便查漏补缺。
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实验报告继承、多态、接⼝和异常处理实验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练习题答案

一、填空题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__两种具体类型。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
抽象类和抽象方法的使用规则
抽象类只能作为其它类的基类,它不能直接被实例化。它只 能作为基类使用。 抽象类中可以存在非抽象的方法,抽象方法必须包含在抽象 类中。 实现抽象方法用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。