接口

课堂练习1:教材160页4.编程题

public abstract class Animal {
abstract void cry();
abstract String getAnimalName();
}


public class Simulator {
void playSound(Animal animal){
	animal.cry();
	animal.getAnimalName();
}
}


public class Dog extends Animal {
String s="哈士奇";	
void cry()
{
	System.out.println("狗的叫声为:汪汪");
}
String getAnimalName(){
	System.out.println("狗的名字为:"+s);
	return s;
}
}



public  class Cat extends Animal {
	String s="凯蒂";		
	void cry()
	{
		System.out.println("猫的叫声为:喵喵");
	}
	String getAnimalName(){
		System.out.println("猫的名字为:"+s);
		return s;
	}
}


public class Application {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Simulator simulator=new Simulator();
		Animal animal2;
		animal2=new Dog();
		simulator.playSound(animal2);
		Animal animal3;
		animal3=new Cat();
		simulator.playSound(animal3);
		
	}

}


课堂练习2:大学里的学生(Student)需要交学费,而研究生(Graduate)作为学生比较特殊,除了需要交学费外,还可以获取一部分科研津贴,由学校(University)统一发放。此外,学校还需要发放教师(Teacher)的工资。

编写代码模拟上述场景:

1)     设计抽象类Student:

属性包括姓名(name)、学费(fee);

方法包括:

-构造方法Student(String name)

-抽象方法void setFee(int fee)

-抽象方法int getFee()

2) 定义一个接口Salary:包含一个方法int getSalary();

3) 定义一个研究生类Graduate,继承Student类且实现Salary接口:

新增属性:收入(salary)

方法包括:

- 构造方法Graduate(String name)

- 重写void setFee(int fee)

- 重写int getFee()

- 重写int getSalary(),研究生获得工资1500

- 新增方法boolean isLoan(),判断是否需要贷款(若收入小于学费则需贷款)

4) 定义一个教师类(Teacher):

属性包括:姓名(name)、收入(salary)

方法包括:

- 构造方法Teacher(String name)

- 重写int getSalary(),教师获得工资3000

       5) 定义一个大学类(University),通过void payOff(Salary s)方法给研究生和教师发放并打印工资。

       6)定义主类Test,

public abstract class Student {
String name;
int fee;
Student(String name){
	this.name=name;
	fee=0;
}
public abstract void setFee(int fee);
public abstract int getFee();
}


public interface Salary {
public abstract int getSalary();
}

public class Graduate extends Student implements Salary{
int salary;
Graduate(String name){
	super(name);
	salary=0;
}
public void setFee(int fee){
	super.fee=fee;
}
public  int getFee(){
	return fee;
}
public int getSalary() {
	return 1500;
}
boolean isLoan(Graduate g){
	if(g.getSalary()<g.getFee())
		return true;
	return false;
}

}


public class Teacher implements Salary {
String name;
int salary;
Teacher(String name){
	this.name=name;
	salary=0;
}
public int getSalary() {
	return 3000;
}
}


public class University{
void payOff(Salary s){
	 System.out.println(s.getSalary());
}
}


public class Test {

	public static void main(String[] args) {
	Graduate g=new Graduate("易烊");	
    g.setFee(1000);
    University u=new University();
    System.out.print("研究生"+g.name+"的工资为:");
    u.payOff(g);
    System.out.println("是否需要贷款:"+g.isLoan(g));
    Teacher t=new Teacher("千玺");
    System.out.print("老师"+t.name+"的工资为:");
    u.payOff(t);
	}
}


第二次作业: 1. 编写点类(Point类),属性成员有x,y,都是double数据类型。需要为Point类编写构造函数。 编写直线类(Line类),需要提供两点确定一条直线的函数功能。 如果两点重合,可以返回异常或者返回null引用来解决这个问题。 直线类的数据成员和函数成员请自行设计。 2. 给定文本文件,文件名称为a.txt,文件内容为一个8行8列的字符矩阵,内容为1和0字符, 请编程计算出该矩阵中水平方向或者垂直方向或者斜线方 向连续1最多的个数。 例如: 11001101 10110101 01010101 11001000 01010101 11001101 00011000 11110000 3. 编写程序求出1万以内的所有素数,并将这些素数输出到一个文本文件中,每行文本只包含一个素数数据。 该文本文件内容要求可以用记事本程序来查看。 4. 编写程序求出1万以内的所有素数,然后再判断这些素数中哪些是由素数拼接而成的。 例如素数23就符合条件,23本身是素数,其由素数2,和素数3拼接(连接)组成。 素数29就不满足条件,2是素数,而9不是素数。素数307不满足条件,不能忽略0. 7907这个素数符合条件,7是素数,907是素数。 需要把符合条件的拼接素数全部输出,并统计个数。 5. 要求从控制台输入英语单词及单词解释两项数据, 把录入的数据追加到文件中。要求提供单词查询功能。 用户输入单词后,从单词库文件中查找,如果存在则输出 该单词的解释。注意,单词不能有重复,如果重复则覆盖替换 以前的解释数据。 6. 通过命令行参数输入一个文件夹的路径名称,然后编写程序找出该文件夹下文件名称重复并且文件大小也一样的文件, 如果没有“重复文件”,则输出“没有重复文件”的提示,如果有,需要输出文件名称,和文件所在的文件夹路径(绝对路径)。 提示,需要遍历该文件夹下所有子文件夹,设计一个文件类,属性包括文件名称,文件路径,文件大小,然后进行“重复” 判断,如果文件重复,则需要记录并输出,有可能有文件名重复,但是文件大小不一样,重复的文件可能不止2个,可能 在不同的子文件夹下有多个文件重复。 7. 霍夫曼编码实现压缩文本文件,见文件huffman.rar. 对文件数据读写等功能已经实现,程序在Q2Resources.zip中。 Q2Resources.zip中的文件禁止修改。请将TextZip.java文件所有未实现的函数按照要求给以实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值