黑马程序员-继承和多态

来源:互联网 发布:国际数据统计公司 编辑:程序博客网 时间:2024/05/21 23:27

------- android培训、java培训、期待与您交流! ----------

封装、继承和多态是面向对象编程的三大特征,直接上实例:

abstract class Person//抽象类:人类的模板{String name;//名字int age;//年龄abstract public void eat();//吃的抽象函数Person(String name,int age)//构造函数{this.name=name;this.age=age;}public static final void show(Person p)//静态函数且不允许复写{System.out.println("名字:"+p.name+"年龄:"+p.age);p.eat();if(p instanceof  Student){Student s=(Student)p;s.study();}else if(p instanceof  Worker){Worker w=(Worker)p;w.work();}if(p instanceof  Smoke){Smoke s=(Smoke)p;s.smoke();}}}interface Smoke//接口:抽烟{void smoke();}class Student extends Person//不抽烟的学生类{Student(String name,int age){super(name,age);}public void eat(){System.out.println("我在学生食堂吃");}public void study(){System.out.println("good study");}}class CyStudent extends Student implements Smoke//抽烟的学生类{CyStudent(String name,int age){super(name,age);}public void smoke(){System.out.println("走,上厕所抽烟去");}}class Worker extends Person//不抽烟的工人{Worker(String name,int age){super(name,age);}public void eat(){System.out.println("我在公司食堂吃");}public void work(){System.out.println("work hard");}}class CyWorker extends Worker implements Smoke//抽烟的工人{CyWorker(String name,int age){super(name,age);}public void smoke(){System.out.println("饭后一根烟,快乐似神仙");}}class Life//生活类{public static void main(String[] args){Student p1=new Student("zhansan",1);CyStudent p2=new CyStudent("wangwu",2);Worker p3=new Worker("lisi",3);CyWorker p4=new CyWorker("zhaoliu",4);Person.show(p1); Person.show(p2); Person.show(p3); Person.show(p4); }}

在这个实例中,类的继承和实现关系入下:

Person类是最顶层的类

Smoke是一个接口

Student 类继承自Person类

Worker类继承自Person类

CyStudent类继承Student类并实现Smoke接口

CyWorker类继承自Worker类并实现了Smoke接口

在Life类中分别创建了Student、Worker、SyStudent、CyWorker类的一个实例,然后通过在Person类中定义的静态成员函数show(),来显示各个实例的具体信息。在show()中,通过判断对象的类型来调用不同对象成员函数。其运行结果如图: