前言:面向对象程序设计过程中少不了
1、封装
2、继承
3、多态
三个特性,其中多态又是怎么理解的呢?
摈弃教科书式回答,多态语义是多种形态的缩写,在面向对象编程的思想中,“万物皆对象”,那么我们知道,对象的行为和属性由模板类定义,而通过模板类(class or interface)我们可以控制对象在runtime的行为属性切换,这就是多态。
exam: 人,在家是孩子,在校是学生,长大了以后可能要当父母,或者是爷爷奶奶。。。。以此类推,同一个对象在不同时刻他们的属性行为不同的概念就是多态,多态可以用子类向上转型实现,也可以用接口实现。
代码实现,篇幅略长,最重要的是main方法的对象实例过程和调用过程,以及class和interface之间的关系。
package test;
public class Test {
public static void main(String args[]) {
//定义一个学生
IStudent stu;
//定义一个老师
ITeacher tea;
//实例化一个人
Person person = new Test().new Person();
person.setName("张三");
//多态实现,这个人,可以是多种状态(身份),
//在家是孩子,在校是学生,或者是老师
//在老教师的面前还是学生,学无止境
stu = person;
tea = person;
stu.learn("英语");
tea.teach("英语");
//切换社会身份,普通人生活的步骤
person.eat("米饭");
person.sleep(7);
person.excrete("流汗");
}
/*学生接口定义*/
interface IStudent{
void learn(String subject);
void exam(String subject);
}
/*老师接口定义*/
interface ITeacher{
void teach(String subject);
}
/*人类高级抽象的接口定义*/
interface IPerson{
//吃
void eat(String food);
//睡
void sleep(int time);
//思
void think(String question);
//说
void say(String msg);
//走
void run(int speed);
//排泄
void excrete(String type);
//交配
void mating(IPerson person);
}
/*人的初级抽象,人有男女之分,以生殖器类型为条件*/
abstract class PersonImpl implements IPerson{
//各种动态属性
private String name;
private String sex;
private int age;
private float height;
private float weight;
private String colour;
@Override
public void eat(String food) {
// TODO Auto-generated method stub
System.out.println("吃" + food);
}
@Override
public void sleep(int time) {
// TODO Auto-generated method stub
System.out.println("睡了" + time + "小时");
}
@Override
public void think(String question) {
// TODO Auto-generated method stub
System.out.println("思考问题: " + question);
}
@Override
public void say(String msg) {
// TODO Auto-generated method stub
System.out.println(msg);
}
@Override
public void run(int speed) {
// TODO Auto-generated method stub
System.out.println("行走中,速度: " + speed);
}
@Override
public void excrete(String type) {
// TODO Auto-generated method stub
System.out.println("排泄中: " + type);
}
@Override
public void mating(IPerson person) {
// TODO Auto-generated method stub
System.out.println("交配中......");
}
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 float getHeight() {
return height;
}
public void setHeight(float height) {
this.height = height;
}
public float getWeight() {
return weight;
}
public void setWeight(float weight) {
this.weight = weight;
}
public String getColour() {
return colour;
}
public void setColour(String colour) {
this.colour = colour;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/*人的具体实现*/
class Person extends PersonImpl implements IStudent, ITeacher{
@Override
public void teach(String subject) {
// TODO Auto-generated method stub
System.out.println("正在教导科目: " + subject);
}
@Override
public void learn(String subject) {
// TODO Auto-generated method stub
System.out.println("正在学习科目: " + subject);
}
@Override
public void exam(String subject) {
// TODO Auto-generated method stub
System.out.println("正在测试科目: " + subject);
}
}
}