习题
一、填空题
1、一个类如果实现一个接口,那么它就需要实现接口中定义的全部__抽象方法____,否则该类就必须定义成_抽象类_____。
2、一个类可以从其它的类派生出来,派生出来的类称为__派生类____,用于派生的类称为_基类_____或者__根类____。
3、定义一个Java类时,如果前面加使用_final_____关键字修饰,那么该类不可以被继承。
4、在Java语言中,所有的类都直接或间接继承自_Object_____类。
5、一个Lambda表达式由三个部分组成,分别为___参数列表___、_->_____和__表达式主题____。
二、判断题
1、抽象方法必须定义在抽象类中,所以抽象类中的方法都是抽象方法。错
2、Java中被final关键字修饰的变量,不能被重新赋值。对
3、不存在继承关系的情况下,也可以实现方法重写。错
重写(就是在子类中重新定义父类中已有的方法)
重写规则之一:重写方法不能比被重写方法限制有更严格的访问级别。(但是可以更广泛,比如父类方法是包访问权限,子类的重写方法是public访问权限。) B、重写规则之二:参数列表必须与被重写方法的相同。重写有个孪生的弟弟叫重载,也就是后面要出场的。如果子类方法的参数与父类对应的方法不同,那么就是你认错人了,那是重载,不是重写。 C、重写规则之三:返回类型必须与被重写方法的返回类型相同。 D、重写规则之四:重写方法不能抛出新的异常或者比被重写方法声明的检查异常更广的检查异常。但是可以抛出更少,更有限或者不抛出异常。 E、重写规则之五:不能重写被标识为final的方法。 F、重写规则之六:如果一个方法不能被继承,则不能重写它。
重载(函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间)
方法重写和重载的主要区别
重写特点:函数名必须相同、参数列表必须相同、子类的返回值类型要等于或者小于父类的返回值类型等。
子类的作用域不能大于父类中方法的作用域,子类抛出的异常类型不能大于父类中抛出的异常类型。
重载的特点:函数名相同,参数列表不同,与访问控制符、返回值类型等无关。
重写用于继承关系的父子类中,不能用于同一类中,而重载通常用于同一类中。
重写用于更改父类方法的行为或者实现接口的方法。而重载用于为一个行为提供多种实现方式。
4、函数式接口在Java中是指有且仅有一个抽象方法的接口。对(P132)
5、接口中只能定义常量和抽象方法。错
接口里的变量必须赋值(初始化)变成常量,默认的是public static final的,不可修改。
三、选择题
1、在类的继承关系中,需要遵循以下哪个继承原则?B
A、多重 B、单一 C、双重 D、不能继承
2、关于super关键字以下说法哪些是正确的?(多选)AD
A、super关键字可以调用父类的构造方法
B、super关键字可以调用父类的普通方法
C、super与this不能同时存在于同一个构造方法中
D、super与this可以同时存在于同一个构造方法中
Super关键字用来访问父类的成员,列入访问父类的成员变量,成员方法,和构造方法
This用于指代当前对象,在方法中访问对象的其他成员
3、类中的一个成员方法被下面哪个修饰符修饰,该方法只能在本类被访问?C
A、public B、 protected C、 private D、default
4、在Java中,要想让一个类继承另一个类,可以使用以下哪个关键字?C
A、inherits B、implements C、extends D、modifies
5、已知类的继承关系如下:
class Employee;
class Manager extends Employee;
class Director extends Employee;
则以下语句能通过编译的有哪些? A
A、 Employee e=new Manager(); B、 Director d=new Manager();
C、 Director d=new Employee(); D、Manager m=new Director();
四、简答题
1、简述什么是方法重写。
重写:在继承关系中,子类的方法与父类的某一方法具有相同的方法名、返回类型和参数列表,则称子类的该方法重写(覆盖)父类的方法。
- 简述什么是多态。
多态:意味着一个对象有着多种形态,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。简单的说,多态就是使用父类类型的变量引用子类对象,根据被引用子类对象的特性,程序会得到不同的运行效果。
- 简述抽象类和接口的区别。
在Java中,使用abstract关键字修饰的类称之为抽象类。抽象类是不能被实例化的,通常需要写一个子类来继承抽象类,同时实例化子类来获得该类的对象。抽象类通常用于表示一种抽象的概念。
接口可以说是一种特殊的抽象类,接口中只能定义常量和抽象方法。由于接口的特殊性,在定义时需要使用interface关键字。
五、编码题
1.设计一个学生类Student和它的一个子类Undergraduate。要求如下:
- Student类有name、和age属性,一个包含两个参数的构造方法,用于给name和age属性赋值,一个show()方法打印Student的属性信息。
- 本科生类Undergraduate增加一个degree(学位)属性。有一个包含三个参数的构造方法,前两个参数用于给继承的name和age属性赋值,第三个参数给degree专业赋值,一个show()方法用于打印Undergraduate的属性信息。
- 在测试类中分别创建Student对象和Undergraduate对象,调用它们的show()。
package one.com;
public class Student {
public String name;
public int age;
public Student(String name,int age) {
this.name=name;
this.age=age;
}
public void show() {
System.out.println("name:"+name+"age:"+age);
}
}
//
package one.com;
public class Undergraduate extends Student{
public String degree;
public Undergraduate(String name, int age,String degree) {
super(name, age);
this.degree=degree;
// TODO Auto-generated constructor stub
}
public void show() {
System.out.println("name="+name+"age:"+age+"degree:"+degree);
}
}
//
package one.com;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student student=new Student("zhangsan",16);
student.show();
Undergraduate underGraduate=new Undergraduate("lisi",20,"bechalor");
underGraduate.show();
}
}
2、设计一个Shape接口和它的两个实现类Square和Circle。要求如下:
1)Shape接口中有一个抽象方法area(),方法接收有一个double类型的参数,返回一个double类型的结果。
2)Square和Circle中实现了Shape接口的area()抽象方法,分别求正方形和圆形的面积并返回。
3)在测试类中创建Square和Circle对象,计算边长为2的正方形面积和半径为3的圆形面积。
package two.com;
public interface Shape {
double area(double givenValue);
}
//
package two.com;
public class Square implements Shape {
public double area(double sideLength) {
return sideLength*sideLength;
}
}
//
package two.com;
public class Square implements Shape {
public double area(double sideLength) {
return sideLength*sideLength;
}
}
//
package two.com;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Square square=new Square();
Circle circle=new Circle();
System.out.println(square.area(2));
System.out.println(circle.area(3));
}
}



