第5章 子类与对象 复习
第5章 子类与对象 复习
第5章 子类与对象 复习2
第5章 子类与对象 复习3
习题五
一、问答题
1.子类可以有多个父类吗?
不可以。
2.java.lang包中的Object类是所有其他类的祖先类吗?
是。
3.如果子类和父类不在同一个包中,子类是否继承父类的友好成员?
不继承。
4.子类怎样隐藏继承的成员变量?
声明与父类同名的成员变量。
5.子类重写方法的规则是怎样的?重写方法的目的是什么?
子类重写的方法类型和父类的方法的类型一致或者是父类的方法的类型的子类型,重写的方法的名字、参数个数、参数的类型和父类的方法完全相同。重写方法的目的是隐藏继承的方法,子类通过方法的重写可以把父类的状态和行为改变为自身的状态和行为。
6.父类的final方法可以被子类重写吗?
不可以。
7.什么类中可以有abstract方法?
abstract类。
8.对象的上转型对象有怎样的特点?
上转型对象不能操作子类新增的成员变量,不能调用子类新增的方法。上转型对象可以访问子类继承或隐藏的成员变量,可以调用子类继承的方法或子类重写的实例方法。
9.一个类的各个子类是怎样体现多态的?
通过重写方法。
10.面向抽象编程的目的和核心是什么?
面向抽象编程目的是为了应对用户需求的变化,核心是让类中每种可能的变化对应地交给抽象类的一个子类类去负责,从而让该类的设计者不去关心具体实现。
---视频讲解--
二、选择题
B.abstract类的子类必须是非abstract类。C.子类继承的方法只能操作子类继承和隐藏的成员变量。D.子类重写或新增的方法也能直接操作被子类隐藏的成员变量。B. abstract类中只可以有abstract方法。C. abstract类中可以有非abstract方法,但该方法不可以用final修饰。D. 不可以同时用final和abstract修饰同一个方法。E. 允许使用static修饰abstract方法。 D。(不能同时用abstract 和final 修饰一个方法)3.下列程序中注释的哪两个代码(A,B,C,D)是错误的(无法通过编译)?class Son extends Father { public static void main(String args[]) {4.假设C是B的子类,B是A的子类,cat是C类的一个对象,bird是B类的一个对象,下列哪个叙述是错误的?A. cat instanceof B的值是true。B. bird instanceof A的值是true。C. cat instanceof A的值是true。D. bird instanceof C的值是true。5.下列程序中注释的哪个代码(A,B,C,D)是错误的(无法通过编译)? public static void main(String args[]) {6.下列代码中标注的(A,B,C,D)中,哪一个是错误的?abstract class Takecare { protected void speakHello() {} //A public abstract static void cry(); //B static int f(){ return 0 ;} //C B。(不能同时用abstract 和static 修饰一个方法)7.下列程序中注释的哪个代码(A,B,C,D)是错误的(无法通过编译)? abstract float getFloat (); //Apublic class B extends A { private float m = 1.0f; //C private float getFloat () //D8.将下列哪个代码(A,B,C,D)放入程序中标注的【代码】处将导致编译错误?A. public float getNum(){return 4.0f;} B. public void getNum(){ } C. public void getNum(double d){ } D. public double getNum(float d){return 4.0d;}public class B extends A { A. 程序提示编译错误(原因是A类没有不带参数的构造方法) public class B extends A { public static void main(String args[]){ System.out.println(b.i); //【代码】--视频讲解--
三、阅读程序
1.请说出E类中【代码1】,【代码2】的输出结果。
double f(double x,double y) {public static void main(String args[]) { System.out.println(b.f(3,5)); //【代码1】 System.out.println(b.f(3.0,5.0)); //【代码2】
【代码1】:15.0。【代码2】:8.0。
---视频讲解---
2.说出下列B类中【代码1】,【代码2】的输出结果。
public int getNumber(int a) { public int getNumber (int a) { public static void main (String args[]) { System.out.println(a.getNumber(10)); //【代码1】 System.out.println(a.getNumber(10)); //【代码2】
【代码1】:11。【代码2】:110。
--视频讲解--
3.请说出E类中【代码1】~【代码4】的输出结果。
double f(double x,double y) { double f(double x,double y) { public static void main(String args[]) { System.out.println(b.f(10.0,8.0)); //【代码1】 System.out.println(b.g(3)); //【代码2】 System.out.println(a.f(10.0,8.0)); //【代码3】 System.out.println(a.g(3)); //【代码4】
【代码1】:98.0。【代码2】:12。【代码3】:98.0。【代码4】:9。
--视频讲解--
4.请说出E类中【代码1】~【代码3】的输出结果。
public static void main(String args[]) { System.out.println(b.getM()); //【代码1】 a.m = -100; // 上转型对象访问的是被隐藏的m System.out.println(a.getM()); //【代码2】上转型对象调用的一定是子类重写的getM()方法 System.out.println(b.seeM()); //【代码3】子类继承的seeM()方法操作的m是被子类隐藏的m
【代码1】:120。【代码2】:120。【代码3】:-100。
---视频讲解--