JAVA语言程序设计(第三版)10.1,10.2,10.3, 10.4
10.1 设计一个名为Swimmable的接口,其中包含void swim()方法;设计另一个名为Flyable的接口,其中包含fly()方法。定义一个Duck类实现上述两个接口。定义测试类,演示接口类型的使用。
package com.leox;
/**
* @Description 10.1 Swimmable接口,Flyable接口,Duck测试类
* @Author xrxleo
* @Date 2020/12/17 4:24 下午
*/
public interface Swimmable {
void swim();
}
interface Flyable {
void fly();
}
class Duck implements Swimmable, Flyable{
@Override
public void swim() {
System.out.println("I can swim");
}
@Override
public void fly() {
System.out.println("I can fly");
}
public static void main(String[] args) {
Duck duck = new Duck();
duck.swim();
duck.fly();
Swimmable s = duck; //自动转换类型
s.swim(); //调用实现swim方法
}
}
10.2 设计一个名为IntSequence的接口表示整数序列,该接口包含boolean hasNext()和int next()两个方法。定义一个名为RandomIntSequence的类实现IntSequence接口,其中包含一个private的整型变量n。在hasNext()方法中随机生成一个两位整数,存储到变量n中,人后返回ture。在next()方法中返回n的值。
package com.leox;
/**
* @Description 10.2 IntSequence接口
* @Author xrxleo
* @Date 2020/12/17 2:24 下午
*/
public interface IntSequence {
public abstract boolean hasNext();
public abstract int next();
}
package com.leox;
/**
* @Description 10.2 RandomIntSequence类
* @Author xrxleo
* @Date 2020/12/17 2:26 下午
*/
public class RandomIntSequence implements IntSequence {
private int n;
@Override
public boolean hasNext() {
n = 10 + (int)(Math.random()*90);
return true;
}
@Override
public int next() {
return n;
}
}
10.3 设计一个SequenceTest的类,在其中编写一个static方法用于计算一个整数序列前n个整数的平均值,方法签名如下:
public static double average(IntSequence seq, int n)
在main()方法中编写代码通过RandomIntSequence的方法获得前10个随机整数,并计算它们的平均值。
package com.leox;
/**
* @Description 10.3 SequenceTest测试类
* @Author xrxleo
* @Date 2020/12/17 2:31 下午
*/
public class SequenceTest {
public static double average(IntSequence seq, int n) {
double sum = 0;
int m = n;
while (seq.hasNext() && m > 0){
//System.out.println(seq.hasNext());
sum = sum + seq.next();
//System.out.println(seq.next());
m = m -1;
}
return sum / n;
}
public static void main(String[] args) {
RandomIntSequence rs = new RandomIntSequence();
double value = average(rs, 10);
System.out.println(value);
}
}
10.4 编写程序,证明下面叙述:接口的静态方法不能被子接口继承,也不被实现类继承。
package com.leox;
/**
* @Description Animal接口,定义了一个默认方法和一个静态方法
* @Author xrxleo
* @Date 2020/12/17 4:39 下午
*/
public interface Animal {
public default void eat(){
System.out.println("I can eat anyting.");
}
public static void speak(){
System.out.println("I can speak English.");
}
//Person接口继承类Animal接口
public interface Person extends Animal{
public default void work(){
System.out.println("I can working.");
}
}
//Student实现了Person接口
public class Student implements Person{
String major;
public Student(){}
}
//测试类
public class InterfaceTest{
public static void main(String[] args) {
Student s = new Student();
s.eat();//默认方法可以被子接口和子类继承
s.speak();//编译错误,说明静态方法不能被继承
Animal.speak();//可以编译,说明只能用定义它的类型调用
s.work();
}
}
}