(1)定义以下这些接口和类,并完成相关属性和方法的声明和调用.数据类型,参数列表,返回值类型等请根据题目需要自行定义.
学习接口Learning(包含方法: 预习preLearn,上课lessons,复习reveiw)
喝酒接口Drinking(包含方法: 喝酒drink, 吐throwup,耍酒疯playMad)
抽象类Person(包含属性:姓名,性别,年龄; 抽象方法:谈恋爱love)
学生Student是人,得会学习,但不能喝酒(因为会使大脑变笨);他们还有自己的学校(school),还喜欢和朋友聊微信(chatting).
公务员Officer是人,不用学习,但经常需要喝酒应酬;他们还得经常开一些无聊的会议(meeting).
程序猿Programmer,是人,必须经常学习,较少社交所以不喝酒;他们特别喜欢写代码(coding),和修bug(debuging).
(2)在场景类Client中定义一个方法method1,在形参和实参上体现对象的多态性,在方法中进行调用,如果对象的实际类型是学生, 就和朋友聊微信;如果是公务员,就去开会;如果是程序
猿,就去写代码和修bug.
(3)直接打印一个学生对象,就能以下面格式来输出:
学生信息: 姓名:张三,性别:男,年龄:20,学校:北大.
(4)如果两个学生的姓名、性别、年龄、学校一样,则认为这两个学生“相等”。
思路:根据题目要求分别定义一个抽象类和两个接口后,再按职业写三个类继承抽象类中的恋爱方法,按要求实现接口,需要加方法的就加方法进去。
代码如下:
package usbAndClass;
/*
* 定义一个抽象类Person(包含属性:姓名,性别,年龄; 抽象方法:谈恋爱love)
*/
public abstract class Person {
private String name;
private String sex;
private String age;
public Person() {
}
public Person(String name, String sex, String age) {
this.name = name;
this.sex = sex;
this.age = age;
}
package usbAndClass;
/*
* 学习接口
*/
public interface Learning {
public void prelearn();// “预习”方法
public void lesson();// “上课”方法
public void review();// “复习”方法
}
package usbAndClass;
/*
* 喝酒接口Drinking
*/
public interface Drinking {
public void drink();// 喝酒方法
public void throwup();// 吐酒方法
public void playMad();// 耍酒疯方法
}
package usbAndClass;
/*
* 定义一个学生类,继承Person类并实现学习接口learning,学生有学校。
*/
public class Student extends Person implements Learning {
private String school;
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
public Student() {
}
public Student(String name, String sex, String age, String school) {
super(name, sex, age);
this.school = school;
}
public void prelearn() {// “预习”方法
System.out.println("敲完这个代码就去预习信息论,微笑.jpg");
}
public void lesson() {// “听课”方法
System.out.println("我爱学习");
}
public void review() {// “复习”方法
System.out.println("如果学习它也爱我他就会自己复习自己");
}
public void love() {// 继承Person类的谈恋爱抽象方法
System.out.println("谈恋爱吗,分手就割腕的那种");
}
public void chatting() {// 自己写的聊微信方法
System.out.println(this.getName() + "爱和朋友聊微信");
}
public String toString() {// 重写toString()方法
return "学生信息: 姓名:" + super.getName() + " 性别:" + super.getSex()
+ " 年龄:" + super.getAge() + " 学校:" + this.getSchool();
}
public boolean equals(Student stu1) {// 重写equals()方法
Student stu = (Student) stu1;
if (this.getName() == stu.getName() && this.getSex() == stu.getSex()
&& this.getAge() == stu.getAge()
&& this.getSchool() == stu.getSchool()) {
return true;
}
return false;
}
}
package usbAndClass;
/*
*公务员类,继承Person类并实现喝酒接口Drinking,还要开会。
*/
public class Officer extends Person implements Drinking {
public Officer() {
}
public Officer(String name, String sex, String age) {
super(name, sex, age);
}
public void drink() {// 喝酒方法
System.out.println("应酬就得喝醉");
}
public void throwup() {// 吐酒方法
System.out.println("喝醉就得吐");
}
public void playMad() {// 发疯方法
System.out.println("发酒疯????!!!");
}
public void love() {// 继承父类的谈恋爱方法
System.out.println("emmm...那就,谈个恋爱?嗯哼");
}
public void meeting() {// 开会方法
System.out.println(this.getName() + "经常开开无聊的会");
}
}
package usbAndClass;
/*
* 程序员类,继承Person类,实现学习接口Learning
*/
public class Programmer extends Person implements Learning {
public Programmer() {
}
public Programmer(String name, String sex, String age) {
super(name, sex, age);
}
public void love() {// 继承Person中的谈恋爱方法
System.out.println("立志找一个程序员,有好多好多钱哈哈哈");
}
public void prelearn() {// 预习方法
System.out.println("寒假会好好预习。。。");
}
public void lesson() {// 听课方法
System.out.println("努力成为优秀的程序员。。。");
}
public void review() {// 复习方法
System.out.println("复习的话,写博客算吗?");
}
public void coding() {// 自定义的关于“写代码”的方法
System.out.println(super.getName() + "特喜欢写代码");
}
public void debuging() {// 自定义的“改代码”的方法
System.out.println(super.getName() + "还喜欢修bug");
}
}
package usbAndClass;
/*
* 在场景类Client中定义一个方法method1,在形参和实参上体现对象的多态性,在方法中进行调用,如果对象的实际类型是学生,
就和朋友聊微信;如果是公务员,就去开会;如果是程序猿,就去写代码和修bug.
*/
public class Client {
public static void main(String[] args) {
Student stu = new Student("小白", "男", "20", "西安邮电大学");
Officer off = new Officer("小林子", "男", "44");
Programmer pro = new Programmer("大白", "男", "23");
System.out.println("职业:学生");
method1(stu);
System.out.println("职业:公务员");
method1(off);
System.out.println("职业:程序员");
method1(pro);
System.out.println(stu);
System.out.println("输出另一学生数据进行比对");
Student stu1 = new Student("小白", "男", "20", "西安邮电大学");
System.out.println("比较结果:" + stu.equals(stu1));
}
public static void method1(Person per) {
if (per instanceof Student) {
Student stu = (Student) per;
stu.chatting();
} else if (per instanceof Officer) {
Officer off = (Officer) per;
off.meeting();
} else if (per instanceof Programmer) {
Programmer pro = (Programmer) per;
pro.coding();
pro.debuging();
}
}
}
程序结果截图: