学习接口Learning(包含方法: 预习preLearn,上课lessons,复习reveiw)
喝酒接口Drinking(包含方法: 喝酒drink, 吐throwup,耍酒疯playMad)
抽象类Person(包含属性:姓名,性别,年龄; 抽象方法:谈恋爱love)
学生Student是人,得会学习,但不能喝酒(因为会使大脑变笨);他们还有自己的学校(school),还喜欢和朋友聊微信(chatting).
公务员Officer是人,不用学习,但经常需要喝酒应酬;他们还得经常开一些无聊的会议(meeting).
程序猿Programmer,是人,必须经常学习,较少社交所以不喝酒;他们特别喜欢写代码(coding),和修bug(debuging).
//学习接口
package oop;
public interface Learning {
public void preLearn();
public void lessons();
public void reveiw();
}
//喝酒接口
package oop;
public interface Drinking {
public void drink();
public void throwup();
public void playMad();
}
//父类Person
package oop;
/*
* Person抽象类
*/
public abstract class Person {
private String name;
private String sex;
private int age;
public abstract void love();
public Person() {
}
public Person(String name, String sex, int age) {
super();
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
//Student类
package oop;
public class Student extends Person implements Learning {
private String school;
public void chatting(){
System.out.println("学生喜欢和朋友聊微信!");
}
public String getSchool() {
System.out.println("学校名字:"+this.school);
return school;
}
public void setSchool(String school) {
this.school = school;
}
@Override
public void preLearn() {
System.out.println("学生预习!");
}
@Override
public void lessons() {
System.out.println("学生上课!");
}
@Override
public void reveiw() {
System.out.println("学生复习!");
}
@Override
public void love() {
System.out.println("学生可能在校期间谈恋爱!");
}
}
//officer类
package oop;
public class Officer extends Person implements Drinking {
public void meeting(){
System.out.println("公务员得经常开一些无聊的会议!");
}
@Override
public void drink() {
System.out.println("公务员需要喝酒应酬!");
}
@Override
public void throwup() {
System.out.println("公务员喝酒应酬后可能会吐!");
}
@Override
public void playMad() {
System.out.println("公务员喝酒应酬后可能会耍酒疯!");
}
@Override
public void love() {
// TODO Auto-generated method stub
}
}
//programmer类
package oop;
public class Programmer extends Person implements Learning {
public void coding(){
System.out.println("程序员喜欢写代码!");
}
public void debuging(){
System.out.println("程序员喜欢修bug!");
}
@Override
public void preLearn() {
System.out.println("程序员需要预习新的编程知识!");
}
@Override
public void lessons() {
System.out.println("程序员有可能也要上编程类的课程!");
}
@Override
public void reveiw() {
System.out.println("程序员需要巩固旧的编程知识!");
}
@Override
public void love() {
// TODO Auto-generated method stub
}
}
//test类
package oop;
public class Test {
public static void main(String[] args) {
Student stu=new Student();
Officer o=new Officer();
Programmer p=new Programmer();
method(stu);
method(p);
method(o);
/**学生对象
Person per=new Student();//向上转型
System.out.println(per instanceof Person);
System.out.println(per instanceof Student);
Student stu1=(Student)per;//向下转型
stu1.preLearn();//学生实现的方法
stu1.chatting();
**/
}
public static void method(Person per){
if(per instanceof Student){
Student stu=(Student)per;//向下转型
stu.preLearn();
stu.lessons();
stu.reveiw();
stu.setSchool("明辉中学");
stu.getSchool();
stu.chatting();
}
if(per instanceof Officer){
Officer o=(Officer)per;
o.drink();
o.throwup();
o.playMad();
o.meeting();
}
if(per instanceof Programmer){
Programmer p=(Programmer)per;
p.preLearn();
p.reveiw();
p.coding();
p.debuging();
}
}
}
(2)在场景类Client中定义一个方法method1,在形参和实参上体现对象的多态性,在方法中进行调用,如果对象的实际类型是学生,
就和朋友聊微信;如果是公务员,就去开会;如果是程序猿,就去写代码和修bug.
//clientl类
package oop2;
public class Client {
private String name;
private int age;
public Client(){
}
public Client(String name ,int age){
this.name=name;
this.age=age;
}
public void method1(){
}
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;
}
}
//student类
package oop2;
public class Student extends Client {
public Student() {
}
public Student(String name,int age){
super(name,age);
}
@Override
public void method1() {
System.out.println("学生和朋友聊天!");
}
}
//officer类
package oop2;
public class Officer extends Client{
public Officer(){
}
public Officer(String name,int age){
super(name, age);
}
@Override
public void method1() {
System.out.println("公务员要开会!");
}
}
//programmer类
package oop2;
public class Programmer extends Client{
public Programmer(){
}
public Programmer(String name,int age){
super(name, age);
}
@Override
public void method1() {
System.out.println("程序员写代码、修bug!");
}
}
//test类
package oop2;
public class Test {
public static void main(String[] args) {
Student stu = new Student();
Officer o = new Officer();
Programmer p = new Programmer();
method(stu); //实参调用方法
method(o);
method(p);
}
public static void method(Client c) { //形参
if(c==null){
System.out.println("不能直接传递null!");
}
if (c instanceof Student) {
Student stu = (Student) c;//向下转型
stu.method1();
}
if (c instanceof Officer) {
Officer o = (Officer) c;
o.method1();
}
if (c instanceof Programmer) {
Programmer p= (Programmer) c;
p.method1();
}
}
}
(3)直接打印一个学生对象,就能以下面格式来输出:
学生信息: 姓名:张三,性别:男,年龄:20,学校:北大.
//student类
package object;
public class Student {
private String name;
private String sex;
private int age;
private String schoolname;
public Student(){
}
public Student(String name, String sex, int age, String schoolname) {
this.name=name;
this.sex=sex;
this.age=age;
this.schoolname=schoolname;
}
public boolean equals(Object obj){
Student stu=(Student)obj; //向下转型
if(this.name!=null && this.name.equals(stu.name) && this.sex.equals(stu.sex)
&& this.age==(stu.age) && this.schoolname.equals(stu.schoolname)){
return true;
}
return false;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSchoolname() {
return schoolname;
}
public void setSchoolname(String schoolname) {
this.schoolname = schoolname;
}
@Override
public String toString() {
return "学生信息: 姓名:" + name + ", 性别:" + sex + ", 年龄:" + age
+",学校名称:"+schoolname+ ".";
}
}
//toString类
package object;
public class ToString {
public static void main(String[] args) {
Student stu=new Student("张三","男",20,"北大");
System.out.println(stu);
}
}
(4)如果两个学生的姓名、性别、年龄、学校一样,则认为这两个学生“相等”。
//student类
package object;
public class Student {
private String name;
private String sex;
private int age;
private String schoolname;
public Student(){
}
public Student(String name, String sex, int age, String schoolname) {
this.name=name;
this.sex=sex;
this.age=age;
this.schoolname=schoolname;
}
public boolean equals(Object obj){
Student stu=(Student)obj; //向下转型
if(this.name!=null && this.name.equals(stu.name) && this.sex.equals(stu.sex)
&& this.age==(stu.age) && this.schoolname.equals(stu.schoolname)){
return true;
}
return false;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSchoolname() {
return schoolname;
}
public void setSchoolname(String schoolname) {
this.schoolname = schoolname;
}
@Override
public String toString() {
return "学生信息: 姓名:" + name + ", 性别:" + sex + ", 年龄:" + age
+",学校名称:"+schoolname+ ".";
}
}
//equals类
package object;
public class Equals {
public static void main(String[] args) {
Student stu=new Student("林夕","女",18,"北大");
Student stu1=new Student("林夕","女",18,"北大");
Student stu2=new Student("林杨","男",18,"清华");
stu.equals(stu1);
System.out.println(stu.equals(stu1)?"学生与学生1“相等”":"学生与学生1“不相等”");
stu.equals(stu2);
System.out.println(stu.equals(stu2)?"学生与学生2“相等”":"学生与学生2“不相等”");
}
}