java 继承练习题
- 格式:docx
- 大小:3.44 KB
- 文档页数:2
736、系统提供请简述Java中继承的概念以及使用继承的好处。
修改参考答案:概念:在Java中","类的继承是指在一个现有类的基础上去构建一个新的类","构建出来的新类被称作子类","现有类被称作父类","子类会自动拥有父类所有可继承的属性和方法。
好处:继承性主要描述的是类与类之间的关系","通过继承","可以无需重新编写原有类的情况下","对原有类的功能进行使用和扩展。
738、系统提供请按照下列提示,使用for循环打印出下面的效果图。
*************************1,一个外部for循环记录打印的行数。
2,外部for循环内,定义一个for循环记录每一行的空格数。
(观察空格个数和行数之间规律)3,外部for循环内,定义一个for循环记录每一行的“*”数。
(观察“*”个数和行数之间规律)修改参考答案:public class Test {public static void main(String[] args) {// 首先把菱形看成上下","上五下四","所以第一个for有5次","第二个for有4次for (int i = 1; i <= 5; i++) {// 将空格和*分开看","看" "的变化i=1时","他是4 ","2的时候是3找规律for (int j = 1; j <= 5 - i; j++)System.out.print(" ");for (int k = 1; k <= 2 * i - 1; k++)// 找规律","i是 1 3 5 7 基数嘛System.out.print('*');// 换一行System.out.println();}for (int i = 1; i <= 4; i++) {for (int j = 1; j <= i; j++)// 空格 1 2 3 4 soSystem.out.print(" ");for (int k = 7; k >= 2 * i - 1; k--)// * 7 5 3 1倒着来的基数System.out.print('*');System.out.println();}}}答案解析:理顺每一行*和空格的个数和关系,一个for循环记录行数,内部两个for循环一个输出*,一个输出空格742、系统提供请描述一下实现Runnable接口创建并启动线程的步骤。
习题一、选择题1. 面向对象程序设计的基本特征是(BCD)。
(多选)A.抽象B.封装C.继承D.多态2.下面关于类的说法正确的是(ACD)。
(多选)A.类是Java 语言中的一种复合数据类型。
B.类中包含数据变量和方法。
C.类是对所有具有一定共性的对象的抽象。
D.Java 语言的类只支持单继承。
上机指导1.设计银行项目中的注册银行用户基本信息的类,包括账户卡号、姓名、身份证号、联系电话、家庭住址。
要求是一个标准Java类(数据私有,提供seter/getter),然后提供一个toString方法打印该银行用户的信息。
答:源代码请参见“CH05_LAB\src\com\inspur\ch05\BankUser.java”2.设计银行项目中的帐户信息,包括帐户卡号、密码、存款,要求如“练习题1”。
答:源代码请参见“CH05_LAB\src\com\inspur\ch05\Account.java”3.设计银行项目中的管理员类,包括用户名和密码。
要求如“练习题1”。
答:源代码请参见“CH05_LAB\src\com\inspur\ch05\Manager.java”4.创建一个Rectangle类。
添加两个属性width、height,分别表示宽度和高度,添加计算矩形的周长和面积的方法。
测试输出一个矩形的周长和面积。
答:源代码请参见“CH05_LAB\src\com\inspur\ch05\Rectangle.java”5.猜数字游戏:一个类A有一个成员变量v,有一个初值100。
定义一个类,对A类的成员变量v进行猜。
如果大了则提示大了,小了则提示小了。
等于则提示猜测成功。
答:源代码请参见“CH05_LAB\src\com\inspur\ch05\Guess.java”6.编写一个Java程序,模拟一个简单的计算器。
定义名为Computer的类,其中两个整型数据成员num1和num1,编写构造方法,赋予num1和num2初始值,再为该类定义加、减、乘、除等公有方法,分别对两个成员变量执行加减乘除的运算。
继承的基本概念:(1)Java不⽀持多继承,也就是说⼦类⾄多只能有⼀个⽗类。
(2)⼦类继承。
继承的基本概念:(1)Java不⽀持多继承,也就是说⼦类⾄多只能有⼀个⽗类。
(2)⼦类继承了其⽗类中不是私有的成员变量和成员⽅法,作为⾃⼰的成员变量和⽅法。
(3)⼦类中定义的成员变量和⽗类中定义的成员变量相同时,则⽗类中的成员变量不能被继承。
(4)⼦类中定义的成员⽅法,并且这个⽅法的名字返回类型,以及参数个数和类型与⽗类的某个成员⽅法完全相同,则⽗类的成员⽅法不能被继承。
分析以上程序⽰例,主要疑惑点是“⼦类继承⽗类的成员变量,⽗类对象是否会实例化?私有成员变量是否会被继承?被继承的成员变量在哪⾥分配空间?”1:虚拟机加载ExtendsDemo类,提取类型信息到⽅法区。
2:通过保存在⽅法区的字节码,虚拟机开始执⾏main⽅法,main⽅法⼊栈。
3:执⾏main⽅法的第⼀条指令,new Student(); 这句话就是给Student实例对象分配堆空间。
因为Student继承Person⽗类,所以,虚拟机⾸先加载Person类到⽅法区,并在堆中为⽗类成员变量在⼦类空间中初始化。
然后加载Student类到⽅法区,为Student类的成员变量分配空间并初始化默认值。
将Student类的实例对象地址赋值给引⽤变量s。
4:接下来两条语句为成员变量赋值,由于name跟age是从⽗类继承⽽来,会被保存在⼦类⽗对象中(见图中堆中在⼦类实例对象中为⽗类成员变量分配了空间并保存了⽗类的引⽤,并没有实例化⽗类。
),所以就根据引⽤变量s持有的引⽤找到堆中的对象(⼦类对象),然后给name 跟age赋值。
4:调⽤say()⽅法,通过引⽤变量s持有的引⽤找到堆中的实例对象,通过实例对象持有的本类在⽅法区的引⽤,找到本类的类型信息,定位到say()⽅法。
say()⽅法⼊栈。
开始执⾏say()⽅法中的字节码。
5:say()⽅法执⾏完毕,say⽅法出栈,程序回到main⽅法,main⽅法执⾏完毕出栈,主线程消亡,虚拟机实例消亡,程序结束。
java面向对象练习题# Java面向对象练习题一、选择题1. 在Java中,以下哪个关键字用于定义类的访问权限为“仅包内可见”?- A. public- B. private- C. protected- D. 默认(不写访问修饰符)2. 以下哪个是Java中的构造方法?- A. 与类名相同,没有返回类型的方法- B. 与类名不同,没有返回类型的方法- C. 与类名相同,有返回类型的方法- D. 与类名不同,有返回类型的方法3. 在Java中,哪个关键字用于实现类的继承?- A. extends- B. implements- C. override- D. abstract4. 以下哪个是Java中类的成员变量?- A. 局部变量- B. 实例变量- C. 静态变量- D. 方法参数5. 以下哪个是Java中的多态性?- A. 接口- B. 继承- C. 封装- D. 抽象类二、简答题1. 解释Java中的封装性,并给出一个封装的类的例子。
2. 描述Java中接口和抽象类的区别。
3. 什么是Java中的继承?请举例说明如何使用继承。
三、编程题1. 创建一个名为`Person`的类,包含姓名(name)、年龄(age)和性别(gender)三个属性。
为每个属性提供getter和setter方法。
2. 编写一个名为`Student`的类,它继承自`Person`类,并添加一个名为`studentID`的属性。
为`studentID`提供getter和setter方法,并重写`toString`方法以返回学生的详细信息。
3. 创建一个接口`Movable`,包含一个方法`move()`。
然后创建一个名为`Car`的类实现该接口,并提供`move`方法的具体实现。
四、综合应用题1. 设计一个简单的银行账户系统,包含以下类:- `Account`:基本账户类,包含账户ID、账户余额和存款(deposit)与取款(withdraw)方法。
面向对象编程基本知识练习一、判断题1.不需要定义类,就能创建对象。
()2.构造方法用于给类的private 实例变量赋值。
()3.对象一经声明就可以立即使用。
()4.在定义变量和方法时,必须清楚地在其面前标上访问权限修饰符。
()5.Java 程序中的参数传递都是把参数值传递给方法定义中的参数。
()6.在类定义中,成员访问权限修饰符不能多次出现。
()7.new 操作符动态地为对象按其指定的类型分配内存,并返回该类型的一个引用。
()8.类的方法通常设为public,而类的实例变量一般也设为public。
()9.构造方法在创建对象时被调用。
()10.通过点运算符与类对象的引用相连,可以访问此类的成员。
()11.声明为protected 的类成员只能被此类中的方法访问。
()12.同一个类的对象使用不同的内存段,但静态成员共享相同的内存空间。
()13.类的成员变量可以放在类体的任意位置。
()14.声明为protected 的类成员可以被此类作用域中的任何对象访问。
()15.没有返回值的方法可以用void 来表示,也可以不加。
()二、选择题1. 下面对对象概念描述错误的是:( )A 操作是对象的动态属性B 任何对象都必须有继承性C 对象间的通讯靠消息传递D 对象是属性和方法的封装体2.编译并运行下面的程序,运行结果为:( )public class A{public static void main(String[] args){A a=new A();a.method(8);}void method(int i){System.out.println(“int:“+i);}void method(long i){System.out.println(“long:“+i);}}A 程序可以编译运行,输出结果为int:8B 程序可以编译运行,输出结果为long:8C 程序有编译错误,因为两个method()方法必须定义为静态(static)的D 程序可以编译运行,但没有输出3.下面关于类的说法不正确的是:()A 类是Java 语言中的一种复合数据类型B 类中不包含数据变量和方法C 类是对所有具有一定共性的对象的抽象D Java 语言的类只支持单继承4.能作为类及其成员的修饰符是:()A interfaceB classC protectedD public5.设x、y 均为已定义的类名,下列声明对象x1 的语句不可能正确的是:()A public x xl=new y();B public y xl=new x();C x xl=new x();D x xl=x();6.面向对象程序设计技术的特点是:()A 可重用性B 可维护性C 表示方法的一致性D 可重用性、可维护性、表示方法的一致性7.下列方法定义中,方法头不正确的是:()A public static x(double a){…}B public static int x(double y){…}C void x(double d)D public int x(){…}8.设已声明了一个类A 的两个对象al、a2,为了初始化a1 和a2,下面语句正确的是:()A al=new(); a2=new();B al=A new(); a2=A new();C al,a2=new A();D al=new A(); a2=new A();9.构造方法何时被调用?()A 类定义时B 使用对象的变量时C 调用对象方法时D 创建对象时10.下列哪个类声明是正确的?()A public abstract class Car{…}B abstract private move(){…}C protected private number;D abstra ct final class Hl{…}11.下列不属于面向对象程序设计的基本特征的是:()B 封装C 继承D 静态12.请看下面的程序段class Person {String name,department;int age;public Person(String n) { name = n; }public Person(String n,int a) { name = n; age = a; }public Person(String n,String d,int a) {//doing the same as two arguments version of constructer//including assignment name=n,age=a}}下面那一选项可以添加到“//doing the same……”处:()A Person(n,a)B this(Person(n,a))C this(n,a)D this(name.age)13.()是一个特殊的方法,用于对类的实例变量进行初始化。
1、已知类的定义如下public class test_3{int x ;int y ;test_3(int a,int b){x=a;y=b;}test_3(){x=-1;y=-1;}int get_x(){return x++;}int get_y(){return y--;}如果用下面三种不同的方法加载类,写出要求的结果:(1)用test_3 a1=new test_3()后;a1.x的内容为_____ ,a1.y的内容为______。
(2)用test_3 a1=new test_3(-2,5)后;a1.x的内容为_____ ,a1.y的内容为______。
(3)用test_3 a1=new test_3(10)后;其结果是__________。
2、设int x=1,float y=2,则表达式x / y的值是( )A、0B、1C、2D、以上都不是3、以下语句有语法错的是( )A、int x=1;y=2;z=3B、for (int x=10,y=0;x>0;x++);C、while (x>5);D、for(;;);4、void 的含义( )A、方法体为空B、定义的方法没有形参C、定义的方法没有返回值D、方法的返回值不能参加算术运算5、以下有关类定义的说法正确的是( )A、一个类可以有成员,也可以没有成员B、类的成员至少有一个属性和一个方法C、类的静态属性同全局变量的概念完全一样,只是表达形式不同D、类的方法在实例化时不占用内存6、以下有关构造函数的说法,正确的是( )A、一个类的构造函数可以有多个B、构造函数在类定义时被调用C、构造函数只能由对象中的其它方法调用。
D、构造函数可以和类同名,也可以和类名不同7、以下有关类的继承的说明中,正确的是( )A、子类能直接继承父类所有的非私有属性,也可通过接口继承父类的私有属性B、子类只能继承父类的方法,不能继承父类的属性C、子类只能继承父类的非私有属性,不能继承父类的方法D、子类不能继承父类的私有属性8、以下有关类的构造函数继承的说明,正确的是( )A、子类继承父类的构造函数,但不能自己定义B、子类可定义自己的构造函数,但受父类定义的构造函数的限制C、子类和父类均可独自定义自己的构造函数,但执行时的顺序有规定D、如父类定义了构造函数,则子类只能继承父类的构造函数,不能自己定义9、this 和super的使用中,正确的是( )A、都是指一个内存地址B、可以在同一个方法定义中出现C、意义相同D、以上都不10、分析以下程序,下面(AC)方法是对setVar方法的重载。
选择题1、JAVA所定义的版本中不包括:( D )A、JAVA2 EEB、JAVA2 CardC、JAVA2 MED、J AVA2 HEE、J AVA2 SE2、下列说法正确的是( A )A、JAVA程序的main方法必须写在类里面B、JAVA程序中可以有多个main方法C、JAVA程序中类名必须与文件名一样D、J AVA程序的main方法中如果只有一条语句,可以不用{}(大括号)括起来3、变量命名规范说法正确的是( B )A、变量由字母、下划线、数字、$符号随意组成;B、变量不能以数字作为开头;C、A和a在java中是同一个变量;D、不同类型的变量,可以起相同的名字;4、下列javaDoc注释正确的是( C )A、/*我爱北京天安门*/B、//我爱北京天安门*/C、/**我爱北京天安门*/D、/*我爱北京天安门**/5、为一个boolean类型变量赋值时,可以使用( B )方式A、boolean = 1;B、boolean a = (9 >= 10);C、boolean a="真";D、b oolean a = = false;6、以下( C )不是合法的标识符A、STRINGB、x3x;C、voidD、d e$f7、表达式(11+3*8)/4%3的值是( D )A、31B、0C、1D、28、( A )表达式不可以作为循环条件A、i++;B、i>5;C、bEqual = str.equals("q");D、c ount = = i;9、运算符优先级别排序正确的是(A )A、由高向低分别是:()、!、算术运算符、关系运算符、逻辑运算符、赋值运算符;B、由高向低分别是:()、关系运算符、算术运算符、赋值运算符、!、逻辑运算符;C、由高向低分别是:()、算术运算符、逻辑运算符、关系运算符、!、赋值运算符;D、由高向低分别是:()、!、关系运算符、赋值运算符、算术运算符、逻辑运算符;10、以下程序的运行结果是:( B )public class Increment{public static void main(String args[]) {int a;a = 6;System.out.print(a);System.out.print(a++);System.out.print(a);}}A.666B.667C.677D.67611、下列值不为true的表达式有( C )。
1.有关类Demo,哪句描述是正确的?public class Demo extends Base{private int count;public Demo(){System.out.println("A Demo object has been created");}protected void addOne(){count++;}}①当创建一个Demo类的实例对象时,count的值为0。
②当创建一个Demo类的实例对象时,count的值是不确定的。
③超类对象中可以包含改变count 值的方法。
④Demo的子类对象可以访问count。
2.当编译和运行下列程序段时,会发生什么?class Base {}class Sub extends Base {}class Sub2 extends Base {}public class Cex{public static void main(String argv[]){Base b = new Base();Sub s = (Sub) b;}}①通过编译和并正常运行。
②编译时出现例外。
③编译通过,运行时出现例外。
ClassCaseException3.如果任何包中的子类都能访问超类中的成员,那么应使用哪个限定词?①public②private③protected④transient4.下面的哪个选项是正确的?class ExSuper{String name;String nick_name;public ExSuper(String s,String t){name = s;nick_name = t;}public String toString(){return name;}}public class Example extends ExSuper{public Example(String s,String t){super(s,t);}public String toString(){return name +"a.k.a"+nick_name;}public static void main(String args[]){ExSuper a = new ExSuper("First","1st");ExSuper b = new Example("Second","2nd");System.out.println("a is"+a.toString());System.out.println("b is"+b.toString());}}①编译时会出现例外。
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 对象,并调用它们的方法。
4. 创建一个 Vehicle 类,具有属性 brand 和 price,以及方法 run() 和 stop()。
然
后创建一个 Car 类,继承自 Vehicle 类,并添加属性 numDoors,以及重写的方法 run() 和 stop()。
最后创建一个 Motorcycle 类,也继承自 Vehicle 类,并添加
属性 numWheels,以及重写的方法 run() 和 stop()。
在主函数中创建一个 Car
对象和一个 Motorcycle 对象,并调用它们的方法。
通过完成以上练习题,我们可以更好地理解和掌握 Java 继承的概念和用法。
继
承使得代码更加模块化和可重用,同时也提高了代码的可维护性和可扩展性。
在实际开发中,我们经常会使用继承来构建复杂的软件系统,因此对继承的理
解和应用是非常重要的。
除了继承,Java 还提供了其他面向对象的特性,如封装、多态等。
这些特性共
同构成了面向对象编程的基础,也是 Java 成为一种强大而灵活的编程语言的重
要原因之一。
通过不断学习和练习,我们可以更好地掌握和应用这些特性,从
而编写出高质量、可维护和可扩展的代码。
总结起来,通过继承练习题的完成,我们可以加深对 Java 继承的理解,并提高
对面向对象编程的掌握。
继承是面向对象编程中的重要概念之一,掌握好继承
的用法可以使我们的代码更加模块化、可重用、可维护和可扩展。
希望通过这
些练习题,你能够更好地理解和应用Java 继承。
祝你在学习和实践中取得进步!。