1:关于接口和抽象类,下列说法正确的是(ACD)
A.抽象类可以有构造方法,接口没有构造方法
B.抽象类可以有属性,接口没有属性
C.抽象类可以有非抽象方法,接口中都是抽象方法 1.8之后
D.抽象类和接口都不能单独创建对象 抽象类有构造方法 可以声明引用但不能创建对象, 接口无构造方法,但是也可以声明引用
2:下列哪一种叙述是正确的(CD)
A.一个Java 类只能实现一个接口
B.一个Java 类不能同时继承一个类和实现一个接口
C.一个Java 类可以实现多个接口
D.一个Java 类只能直接继承一个类
3: 下列关于接口的说法错误的是(B)
A. 接口不能创建对象,可以声明引用
B. 接口中可以定义构造方法
C. 接口中的属性都是公开、静态常量
D. 接口中的方法都是公开、抽象方法
4:接口和抽象类的区别?
抽象类是类(abstract class) 有构造方法 需要子类继承 extends 里边可以有抽象方法也可以有非抽象的方法,单继承
接口(interface)无构造方法 可以说是都是抽象方法的抽象类 ,全是公有的抽象方法, 需要实现,implements 实现可以多实现
5:根据要求完成以下代码:
interface IA{
void m1();
void m2();
}
//写出实现类,类名为MyClass
class MyClass implements IA{
public void m1(){}
public void m2(){}
}
6:阅读以下代码
interface IA{
void m1();
void m2();
}
interface IB extends IA{
void m3();
}
class MyClass implements IB{
public void m1(){}
public void m2(){}
public void m3(){}
public void m4(){}
}
在主函数中 IA ia=new MyClass();以ia可以调用方法是()
A. m1 B. m2 C. m3 D. m4
7:Java中,以下关于继承的叙述正确的是(A)
A. 类只允许单继承
B. 一个类只能实现一个接口
C. 一个类不能同时继承一个类和实现多个接口
D. 接口只允许单一继承。
8:仔细阅读以下代码,有几处错误代码?并修改正确。
System.out.println(ia.a);
9:仔细阅读以下代码,根据语法将代码补全。
abstract public void m2(){}
10:仔细阅读以下代码,根据要求完成程序。
如果有一个类ClassE 实现ID 接口,如果不希望 ClassE 是抽象的,则需要实现哪些方法?
ma() mb() mc() md()
将以下代码补充完整:
ia.ma();
IB ib=(IB)ic;
ib.mb();
ic.mc();
ID id=(ID)ic;
id.md();
写出以下程序输出的结果:
false
true
false
true
11:仔细阅读以下代码,写出程序输出的结果。
true true true true
12:仔细阅读以下代码,写出程序运行输出结果。
Red Light shine in Red
Yellow Light shine in Yellow
Green Light shone in Green
13:仔细阅读以下代码,写出程序输出的结果。
TeacherA teach Java
TeacherB teach Java
14:仔细阅读以下代码:
需要一个实现ServiceInterface 接口的类MyService。
①第一种方式可以让 MyService 实现ServiceInterface 接口,即: class MyService implements ServiceInterface
②第二种方式可以让 MyService 继承AbstractService 类,即: class MyService extends AbstractService
请问:这两种方式有什么区别?AbstractService 类有什么作用?
class MyService implements ServiceInterface{
public void doService1(){}
public void doService2(){}
public void doService3(){}
}
一种是实体类直接继承接口,需要实现接口中所有的方法,比较麻烦,且接口中可能会有实体类不需要的抽象方法,如果实体类实现接口,就必须实方法
一种是缺省适配器模式由抽象类实现接口,抽象类中可以有抽象和非抽象方法,起到一个过滤子类不需要的方法的作用,把子类不需要的方法实例化,子类再继承抽象类就不需要 重写无用方法了
15:仔细阅读以下代码,完成//1、//2、//3、//4 处程序。
Animal []as={new Cat,new Dog,new Wolf};
int count=0;
for(int i=0;i<as.length;i++){
if(as[i] instanceof Dog){
as[i].eat();
as[i].play();
count++;
}else if(as[i] instanceof Cat){
as[i].eat();
as[i].play();
count++
}else{
as[i].eat
count++
}
}
System.out.println(count);
16:编程:定义一个接口 MathTool,接口中有三个抽象方法如下:
“long fact(int m);”方法的功能为:求参数的阶乘
“long intPower(int m , int n)”方法的功能为:求m 的n 次方
“boolean findFactor(int m,int n)”方法的功能为:判断参数的和是否大于 100
定义类实现接口,编写应用程序,调用接口中的 3 个方法,并将调用方法的结果输出。
17:编程:把继承练习题中形状改为接口
package com.by.homework3.figure;
public interface Figure {
public abstract void qiuzhouchang();
public abstract void qiumianji();
}
package com.by.homework3.figure;
public class Circle implements Figure{
int banjin;
public Circle(int banjin) {
this.banjin = banjin;
}
@Override
public void qiuzhouchang() {
Double zhouchang=2*3.14*banjin;
System.out.println("圆的周长:"+zhouchang);
}
@Override
public void qiumianji() {
Double mianji=3.14*banjin*banjin;
System.out.println("圆的面积:"+mianji);
}
}
package com.by.homework3.figure;
public class Square implements Figure{
int bianchang;
public Square(){
}
public Square(int bianchang) {
this.bianchang = bianchang;
}
public void qiuzhouchang(){
int zhouchang=bianchang*4;
System.out.println("正方形的周长:"+zhouchang);
}
public void qiumianji(){
int mianji=bianchang*bianchang;
System.out.println("正方形的面积:"+mianji);
}
}
18:定义一个接口MediaPlayer,表示一个家庭影院的设备,MediaPlayer中包含play(),stop(),open(),三个方法分别表示播放、停止和开仓功能。
MediaPlayer有三个实现类,分别是:DVDPlayer,表示DVD播放器;CDPlayer,表示CD播放器; TapePlayer,表示收音机(播放磁带)。
创建一个遥控器Controller类。该遥控器有三个频道,可以分别控制三个设备。部分代码如下:
要求:
①完成MediaPlayer接口及其实现类代码。
package com.by.homework6.mediaPlayer;
interface MediaPlayer{
void play();
void open();
void stop();
}
class DVDPlayer implements MediaPlayer{
@Override
public void play() {
}
@Override
public void open() {
}
@Override
public void stop() {
}
}
class CdPLayer implements MediaPlayer{
@Override
public void play() {
}
@Override
public void open() {
}
@Override
public void stop() {
}
}
class TapePlayer implements MediaPlayer{
@Override
public void play() {
}
@Override
public void open() {
}
@Override
public void stop() {
}
}
class Controller{
private MediaPlayer[] players;
public Controller(){
}
public void play(int i){
players[i].play();
}
}
public class MediaPlayerTest {
public static void main(String[]args){
}
}
②把Controller补充完整,完善其构造方法,并为其增加stop(int i)和open(int i)方法
19:定义一个Performer接口,表示一个演员,接口中定义perform方法,表示表演。为这个接口提供若干实现类:singer,表示歌手;Dancer,表示舞蹈演员;Player,表示演奏者。
定义一个Program类,表示一个节目。每一个节目需要多个演员配合,因此每一个Program类中都包含一个属性:Performer数组,表示表演这个节目所需要的演员。
给出Program的部分代码:
class Program{
private Performer[] ps;
public Program(){
ps=new Performer[3];
ps[0]=new Singer();
ps[1]=new Dancer();
ps[2]=new Player();
}
}
在现有代码的基础上,为Program增加一个show方法,在这个方法中,调用所有的表演这个节目的所有Performer的perform方法。
Performer 接口:
public interface Performer {
/**表演*/
public abstract void perform();
}
Singer类:
public class Singer implements Performer {
public void perform() {
System.out.println("歌手在表演");
}
}
Dancer 类:
public class Dancer implements Performer {
public void perform() {
System.out.println("舞蹈演员在表演");
}
}
Player类:
public class Player implements Performer {
public void perform() {
System.out.println("演奏者在表演");
}
}
Program 类:
public class Program {
private Performer[] ps;
public Program(){
ps = new Performer[3];
ps[0] = new Singer();
ps[1] = new Dancer();
ps[2] = new Player();
}
public void show(){
for (int i = 0; i < ps.length; i++) {
ps[i].perform();
}
}
}
PerformerTest 测试类:
public class PerformerTest {
public static void main(String[] args) {
Program program = new Program();
program.show();
}
}
20:定义一个学生类,属性为:姓名、年龄、成绩、头发数量
定义比较排序规则:
根据成绩从大到小排
如果成绩相同,根据头发数量从小到大排
如果头发数量也相同,根据年龄从小到大排
定义测试类,创建学生数组,合理创建若干学生对象,验证排序比较规则
提示:在compare方法中结合嵌套if分支
提交要求:把代码及运行截图放入word文档提交
Student 类:
public class Student {
private String name;
private int age;
private double score;
private int hairNum;
public Student() {
}
public Student(String name, int age, double score,int hairNum) {
this.name = name;
this.age = age;
this.score = score;
this.hairNum = hairNum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public int getHairNum() {
return hairNum;
}
public void setHairNum(int hairNum) {
this.hairNum = hairNum;
}
}
StudentCompare 类:
public class StudentCompare implements Comparator<Student> {
public int compare(Student o1, Student o2) {
if(o1.getScore() < o2.getScore()){
return 1;
}else if(o1.getScore() > o2.getScore()){
return -1;
}else {
//如果成绩相等,头发少的在前
if(o1.getHairNum() > o2.getHairNum()){
return 1;
}else if(o1.getHairNum() < o2.getHairNum()){
return -1;
}else{
if(o1.getAge() < o2.getScore()){
return 1;
}else if(o1.getAge() > o2.getScore()){
return -1;
}
}
return 0;
}
}
}
CompareTest 类:
public class CompareTest {
public static void main(String[] args) {
Student[] students = {new Student("小白",23,100,123456),
new Student("小红",22,88,111111),
new Student("大红",23,88,111111),
new Student("小明",20,100,130000),
new Student("小美",21,90,130000)};
Arrays.sort(students, new StudentCompare());
//输出排序结果
for (int i = 0; i < students.length; i++) {
System.out.println(students[i].getName()+" "+students[i].getAge() +" "
+students[i].getScore() + " " + students[i].getHairNum());
}
}
}