一、单项选择题
1. 有如下的类及对象的定义:
class parentclass []
class subclassl extends parentclass |}
parentclass a = new parentclass ();
subclass1 b= new subclass1();
当执行语句a=b; 时,结果是 【 】
A. 编译时出错 B. 编译时正确,但执行时出错
C. 执行时完全正确 D. 不确定
2. 有如下的类及对象的定义:
class ParentClass {}
class SubClass1 extends ParentClass {}
class SubClass2 extends ParentClass {}
ParentClass a = new ParentClass ();
SubClass1 b= new SubClass1 ();
SubClass2 c= new SubClass2 ();
当执行语句b=(SubClass1)c; 时, 结果是 【 】
A. 编译时出错 B. 编译时正确,但执行时出错
C. 执行时完全正确 D. 不确定
3. Java 接口中可能包含的内容是 【 】
Ⅰ. 没有赋初值的成员变量 Ⅱ. 已赋初值的成员变量
Ⅲ. 抽象方法 Ⅳ. 构造方法
A. Ⅰ和Ⅱ B. Ⅰ和Ⅲ C. Ⅱ和Ⅲ D. Ⅱ、 Ⅲ和Ⅳ
4. 下列关于抽象类的叙述中,正确的是 【 】
A. 只能含有抽象方法,不能含有普通方法
B. 不一定要有抽象方法,必须要有普通方法
C. 必须含有抽象方法,也可以有普通方法
D. 既可以有抽象方法,也可以有普通方法
5. 下列的定义正确的是 【 】
A. class alarmclock { abstract void alarm();}
B. abstract alarmelock | abstract void alarm();|
C. class abstract alarmclock { abstract void alarm();}
D. abstract class alarmclock | abstract void alarm();}
二、填空题
1. Java中,处在类层次中最高层的是object。
2. Java 中实现多重继承的机制是 使用接口。
3. Java 中表示抽象类的关键字是 abstract。
4. Java 中 String类不能被继承, 所以它是一个终极类。
5. 如果类 A继承和扩展类B,则子类 A和父类B之间的关系是is a 关系。
6. 用于定义抽象类的关键字是 abstract。
7. 使用关键字 final 修饰的类是不能被扩展的类。
8. 接口上的所有变量都默认为是 public属性。
三、简答题
1. 请写出接口体中可能包含的内容。
答:抽象方法、常量、注解类型、泛型、私有方法
- 什么是抽象类? 什么是抽象方法? 它们有什么特点和用处?
答:抽象类是一种特殊的类,它不能被实例化,也就是说,您不能直接创建一个抽象类的对象。抽象类的主要用途是作为一个基类,用来派生其他类。抽象类中可以包含抽象方法和其他成员(如普通方法、构造函数、字段等)。
特点
抽象关键字:抽象类使用 abstract 关键字声明。
不能实例化:不能直接创建抽象类的实例。
包含抽象方法:可以包含一个或多个抽象方法,也可以包含非抽象方法。
继承:一个非抽象类继承抽象类时,必须实现抽象类中所有的抽象方法。
普通成员:除了抽象方法之外,还可以包含普通方法、构造函数、字段等成员。
用处
定义标准:抽象类可以定义一套标准的方法签名,供子类实现。
模板方法模式:抽象类可以实现模板方法模式,定义算法的骨架,让子类实现具体步骤。
代码重用:抽象类可以提供一些公共的方法和属性,供子类重用。
封装变化:通过抽象类来封装变化的部分,保持稳定的部分不变。
抽象方法是一种没有具体实现的方法,只在抽象类或接口中声明,没有方法体。子类必须实现抽象方法才能成为一个非抽象类。
特点
抽象关键字:使用 abstract 关键字声明。
无方法体:抽象方法没有大括号 {} 来包含方法体。
强制实现:任何继承了包含抽象方法的类的子类必须实现这些抽象方法。
多态性:抽象方法的存在允许实现多态性,即父类引用指向子类对象。
用处
强制实现:确保派生类实现某些特定的行为。
多态性:通过抽象方法实现多态性,使得父类引用可以指向子类对象,并调用子类的具体实现。
定义接口:抽象方法定义了一个类的公共接口,子类必须遵循这个接口
- 什么是终极类、终极方法和终极变量? 定义终极类型的目的是什么?
答:在 Java 中,“终极”(Final)是一个关键字,用于定义最终类、最终方法和最终变量。
一个类被声明为 final 后,它就变成了一个终极类,这意味着这个类不能被继承。换句话说,任何试图继承这个类的尝试都会导致编译错误。
一个方法被声明为 final 后,它就变成了一个终极方法,这意味着这个方法不能被子类重写。
一个变量被声明为 final 后,它就变成了一个终极变量,这意味着这个变量的值不能被改变。对于引用类型的变量,被声明为 final 后,虽然不能改变引用本身,但是引用的对象仍然可以改变。
- 什么是接口? 接口的作用是什么? 它与抽象类有何区别?
答:接口(Interface)是一种引用类型,它完全由抽象方法组成(从 Java 8 开始,接口可以包含默认方法和静态方法)。接口用于定义一组行为规范,这些规范可以被多个类共同实现。接口中的方法默认是 public 的,并且没有具体的实现(即没有方法体)。
接口的作用
定义行为标准:接口定义了一组需要实现的方法,从而定义了实现该接口的类的行为规范。
多继承的替代方案:Java 不支持多重继承,但一个类可以实现多个接口,这样就可以从多个接口中继承行为。
多态性:接口允许实现多态性,即一个接口可以有多个不同的实现类,通过接口引用可以指向任何实现了该接口的类的对象。
松耦合:接口使得类的设计更加灵活,可以轻松地添加新的实现而无需修改现有的代码。
代码复用:虽然接口本身不能提供代码复用(除非使用默认方法或静态方法),但多个类可以通过实现同一个接口来共享相同的行为规范。
接口与抽象类的区别
抽象方法 vs. 具体实现
接口:接口中的方法默认是抽象的,没有具体实现。从 Java 8 开始,接口可以包含默认方法和静态方法,这些方法有具体实现。
抽象类:抽象类可以包含抽象方法,也可以包含具体实现的方法。
继承数量
接口:一个类可以实现多个接口,实现接口时需要提供所有抽象方法的具体实现。
抽象类:一个类只能继承一个抽象类或其他非抽象类。
成员变量
接口:接口中的变量默认是 public static final 的,通常用于定义常量。
抽象类:抽象类可以拥有各种类型的成员变量,包括实例变量。
访问修饰符
接口:接口中的方法默认是 public 的,不允许使用其他访问修饰符。
抽象类:抽象类中的方法可以有不同的访问级别,例如 protected 或 private。
实现细节
接口:接口主要用于定义行为规范,不提供实现细节。
抽象类:抽象类可以提供部分实现细节,子类可以选择继承或覆盖这些方法。
构造函数
接口:接口没有构造函数。
抽象类:抽象类可以有构造函数,用于初始化抽象类中的成员变量。
- 关键字 super在成员方法中的特殊作用是什么?
答:在 Java 中,super 关键字用于引用当前对象的父类(超类)的对象。它在成员方法中有多种用途,主要作用是在子类中调用父类的方法或访问父类的属性。
super 关键字在成员方法中的主要作用是:
调用父类中被重写的方法。
访问父类中的属性。
在构造器中调用父类的构造器。
在多态情况下,通过类型转换来调用子类中重写的父类方法。
- 什么叫作方法重载? 什么叫作方法重写? 它们之间的区别是什么?
答:方法重载是指在一个类中定义多个同名方法,但这些方法的参数列表不同(参数的数量、类型或顺序不同)。
方法重写是指在子类中重新定义父类中的方法,以便改变或扩展父类的行为。
方法重载(Overloading)
方法签名不同:方法的名称相同,但参数列表不同。
编译时绑定:在编译时根据方法签名确定调用哪个方法。
类内实现:重载发生在同一个类内部。
返回类型无关:返回类型可以不同。
方法重写(Overriding)
方法签名相同:方法的名称、参数列表和返回类型都相同。
运行时绑定:在运行时根据对象的实际类型动态绑定。
子类覆盖父类:重写发生在子类覆盖父类的方法。
访问修饰符限制:子类的方法不能比父类的方法有更严格的访问级别。
返回类型相同:子类重写的方法的返回类型必须与父类相同或更具体。
- 什么是对象转型?
答:对象转型是指在面向对象编程中,将一个对象从一种类型转换为另一种类型的过程。这种转换通常发生在继承层次中,涉及父类引用和子类对象之间的转换。对象转型可以分为两种类型:向上转型(Upcasting)和向下转型(Downcasting)。向上转型是指将一个子类对象赋值给一个父类引用。这种类型的转换是自动的,不需要显式地使用 cast 操作符。向下转型是指将一个父类引用转换为一个子类引用。这种类型的转换需要显式地使用 cast 操作符,因为它可能会导致类型转换异常(ClassCastException)。
- Java 如何实现多重继承?
答:Java 支持一个类实现多个接口,这可以用来实现类似于多重继承的效果。接口可以包含多个抽象方法,实现这些接口的类需要提供这些方法的具体实现。
- 什么是多态?
答:多态是面向对象编程(OOP)的一个核心特性,它允许使用一个接口来表示不同类型的对象。简单来说,多态意味着“多种形式”,它允许程序在运行时根据对象的实际类型来调用合适的方法。多态性使得代码更加灵活、可扩展和可维护。
四、程序分析题
阅读下列程序,请写出该程序的输出结果。
import java. util. Vector;
import java. util. Vector;
class Person{
private String name =" John";
public String getName(){ return name; }
public void setName( String n){ name =n; }
}
class Employee extends Person {
private int employeeNumber;
public int getEmployeeNumber(){ return employeeNumber; }
public void setEmployeeNumber( int number){ employeeNumber = number; }
}
class Manager extends Employee {
public Vector < String > responsibilities;
public Vector< String >getResponsibilities( ){ return responsibilities; }
}
public class PersonTest4{
public static void main( String[] args){
Employee jim= new Manager();
jim. setName(" Jim");
Manager unknown=( Manager) jim;
unknown. setEmployeeNumber(543469);
unknown. responsibilities = new Vector < String>();
unknown. responsibilities. add(" Internet project");
unknown. responsibilities. add(" Internet project1 ");
System. out. println( jim. getName());
System. out. println( jim. getEmployeeNumber());
System. out. println( unknown. getName());
System. out. println( unknown. getEmployeeNumber());
System. out. println( unknown. getResponsibilities());
}
}
答: Jim
543469
Jim
543469
[ Internet project, Internet project1 ]
五、程序设计题
1. 设计并实现一个MyGraphic类及其子类,它们代表一些基本的图形,这些图形包括矩形、三角形、圆、椭圆、菱形、梯形等。试给出能描述这些图形所必需的属性及必要的访问方法。
答:/ 导入必要的包
import java.awt.geom.Point2D;
// 抽象基类 MyGraphic
abstract class MyGraphic {
protected Point2D center;
public MyGraphic(Point2D center) {
this.center = center;
}
public abstract double getArea();
public abstract double getPerimeter();
public Point2D getCenter() {
return center;
}
public void setCenter(Point2D center) {
this.center = center;
}
}
// 矩形类 Rectangle
class Rectangle extends MyGraphic {
private double width;
private double height;
public Rectangle(Point2D center, double width, double height) {
super(center);
this.width = width;
this.height = height;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
@Override
public double getArea() {
return width * height;
}
@Override
public double getPerimeter() {
return 2 * (width + height);
}
}
// 圆形类 Circle
class Circle extends MyGraphic {
private double radius;
public Circle(Point2D center, double radius) {
super(center);
this.radius = radius;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
@Override
public double getArea() {
return Math.PI * radius * radius;
}
@Override
public double getPerimeter() {
return 2 * Math.PI * radius;
}
}
// 其他类(省略实现细节)
class Triangle extends MyGraphic {
// 属性
// 构造函数
// 访问方法
// 重写 getArea 和 getPerimeter 方法
}
class Ellipse extends MyGraphic {
// 属性
// 构造函数
// 访问方法
// 重写 getArea 和 getPerimeter 方法
}
class Diamond extends MyGraphic {
// 属性
// 构造函数
// 访问方法
// 重写 getArea 和 getPerimeter 方法
}
class Trapezoid extends MyGraphic {
// 属性
// 构造函数
// 访问方法
// 重写 getArea 和 getPerimeter 方法
}
2. 设计并实现一个 Vehicle 类及其子类, 比如汽车 automobile、船 ship 及飞机 aircraft,它们代表主要的交通工具,定义必要的属性信息、构造方法及访问方法。可选择的属性包括名称、类型、自重、尺寸、燃料、使用目的、载客人数、载货吨数、最大时速等。可选择的访问方法包括显示自身信息、设置及读取某一属性的方法等。
标签:继承,子类,多态,接口,抽象,第六章,抽象类,方法,public From: https://blog.csdn.net/qq_43601339/article/details/143644437