JAVA基础知识练习1(含答案)
JAVA基础知识练习(含答案)
一、思考题
1.Overload(方法重载)和Override(方法覆盖)的区别。
答:
相同点:
都要求方法同名
都可以于于抽象方法和非抽象方法之间
不同点:
方法覆盖要求参数签名必须一致,而方法重载要求参数签名必须不一致。
方法覆盖要求返回类型必须一致,而方法重载不做限制。
方法覆盖只能用于子类覆盖父类的方法,方法重载用于同一个类的所有方法(包括从父类中继承而来的方法)。
方法覆盖对方法的访问权限和抛出的异常有特殊的要求,而方法重载没有限制。
父类的一个方法只能被子类覆盖一次,而一个方法所在的类中可以被多次重载
2.在创建派生类的对象的时候,基类与派生类中构造方法的调用顺序怎样?
答:编译器会一直上溯到最初类,执行该类构造方法,然后依次执行各子类构造函数
3.比较this和super的区别
答:this是引用本对象,super是引用父类的对象。
4.什么是多态?面向对象程序设计为什么要引入多态的特性?使用多态有什么优点?
答:多态基本含义是“拥有多种形态”,具体指在程序中用相同的名称来表示不同的含义。例如:用同一方法名来表示不同的操作;面向对象程序设计引入多态特征的原因是,使程序更具有可读性,重复利用性;采用多态技术的优点:
引进多态技术之后,尽管子类的对象千差万别,但都可以采用 基类引用.方法名([参数]) 统一 方式来调用,在程序运行时能根据子对象的不同得到不同的结果。这种“以不变应万变”的形式可以规范、简化程序设计,符合软件工程的“一个接口,多种方法”思想。
二、编程题
1.类、对象、方法、继承
(1) 声明矩形类Rect,它封装了:
两个成员变量(访问权限为private):
float length; //矩形的长度,float类型
float width; //矩形的宽度,float类型
9个成员方法(访问权限均为public):
Rect() //默认构造方法
Rect(float l, float w) //带参数的构造方法
void setLength(float l) //改变矩形的长度
float getLength() //得到矩形的长度
void setWidth(float w) //改变矩形的宽度
float getWidth() //得到矩形的宽度
String toString() //输出矩形信息。返回形如: "长度: xxx, 宽度:xxx”
//字符串(其中:xxx表示相应的数值).
float getPerimeter()//得到矩形的周长
float getArea()//得到矩形的面积
(2) 再定义一个长方体类Recter,它继承了矩形类Rect (上一题已定义),并增加了:
一个成员变量(访问权限为private):
height//长方体的高度,float类型
三个成员方法(访问权限均为public):
Recter (float l, float w,float h) //带参数的构造方法,
//需要调用基类带参数构造方法.
float getVolume( ) //返回长方体的体积 (计算公式:底面积×高度)
String toString()//重写toString()方法,返回形如:“矩形长度: xxx, 矩形
//宽度:xxx,长方体的高度:xxx,矩形底面积:xxx,长方体
//体积:xxx”字符串(其中:xxx表示相应的数值).
(3) 最后定义一个主类:RectTest,在它的main()方法中创建一个矩形长度为10.5,矩形宽度为:5.5, 长方体的高度为:6.5的长方体对象ry,然后调用toString()方法输出其相应信息。
2.写出下列实现多态的程序的运行结果
class Animal {
public void display(){
System.out.println("我是一只动物,...");
}
}
class Cat extends Animal {
public void display(){
System.out.println("我是能捉老鼠的猫,...");
}
}
class Dog extends Animal {
public void display(){
System.out.println("我为主人尽忠职守的猎犬,...");
}
}
public class AnimalTest {
public static void main(String