黑马程序员技术交流社区
标题:
多态究竟有什么好处呢?我们该怎么使用它呢?
[打印本页]
作者:
小龙编程世界
时间:
2015-6-28 17:34
标题:
多态究竟有什么好处呢?我们该怎么使用它呢?
多态究竟有什么好处呢?我们该怎么使用它呢?
相信很多朋友都有疑惑,我来举一个例子来给在多态迷惑的兄弟们来解答一下。
如果有什么不对之处,请多多指教!!!
/*
思路:
1,定义一个人类
2,定义一个教师类
3,定义一个工人类
4,定义一个护士类
5,需要打印出教师类、工人类、护士类各3个对象的show()方法、work()方法和eat()方法
5.1 不使用多态操作
5.2 使用多态操作
总结:
1,当你对比5.1 和 5.2 之后,相信兄弟们都知道多态操作比非多态的创建对象,更方便、更具有维护性。
2,如果还有迷惑的,可以这样想想!
当有多了一个司机类,清洁工类,公务员类,非多态又要创建一大堆的对象和调用一大堆方法。
而多态只要创建好对象,无论多少方法,只要调用printTool(new 类名());就解决问题了。
*/
//1,定义一个人类
class Person
{
public void show()
{
System.out.println("人 show");
}
public void work()
{
System.out.println("人 work");
}
public void eat()
{
System.out.println("人 eat");
}
}
//2,定义一个教师类
class Teacher extends Person
{
public void show()
{
System.out.println("教师 show");
}
public void work()
{
System.out.println("教师教书 work");
}
public void eat()
{
System.out.println("教师 eat");
}
}
//3,定义一个工人类
class Worker extends Person
{
public void show()
{
System.out.println("工人 show");
}
public void work()
{
System.out.println("工人修电 work");
}
public void eat()
{
System.out.println("工人 eat");
}
}
//4,定义一个护士类
class Nurse extends Person
{
public void show()
{
System.out.println("护士 show");
}
public void work()
{
System.out.println("护士打针 work");
}
public void eat()
{
System.out.println("护士 eat");
}
}
//6,定义一个工具类专门来调用show()和work()方法。
// 但是他们都是不同类型的,怎么办?唯有使用多态知识解决!
class PersonTool
{
//工具类方法通常都定义成静态,不必创建对象,所以定义构造函数为private
private PersonTool(){}
//定义一个工具类专门来调用show()和work()方法。
//【重点看这里使用到的多态,领悟了对你以后有很大的帮助!】
public static void printTool(Person p)
{
//当这里方法越多,就越需要使用到这样的思想!
p.show();
p.work();
p.eat();
}
}
class DuotaiTest
{
public static void main(String[] args)
{
//5,需要打印出教师类、工人类、护士类各3个对象的show()方法、work()方法和eat()方法
//5.1 不使用多态操作
System.out.println("*******************不使用多态操作*******************");
Teacher t1 = new Teacher();
t1.show();
t1.work();
t1.eat();
System.out.println();
Teacher t2 = new Teacher();
t2.show();
t2.work();
t2.eat();
System.out.println();
Teacher t3 = new Teacher();
t3.show();
t3.work();
t3.eat();
System.out.println("----------------------------------------------------");
Worker w1 = new Worker();
w1.show();
w1.work();
w1.eat();
System.out.println();
Worker w2 = new Worker();
w2.show();
w2.work();
w2.eat();
System.out.println();
Worker w3 = new Worker();
w3.show();
w3.work();
w3.eat();
System.out.println("----------------------------------------------------");
Nurse n1 = new Nurse();
n1.show();
n1.work();
n1.eat();
System.out.println();
Nurse n2 = new Nurse();
n2.show();
n2.work();
n2.eat();
System.out.println();
Nurse n3 = new Nurse();
n3.show();
n3.work();
n3.eat();
System.out.println("----------------------------------------------------");
//5.2 使用多态操作
System.out.println("*******************使用多态操作*******************");
Teacher t4 = new Teacher();
Teacher t5 = new Teacher();
Teacher t6 = new Teacher();
PersonTool.printTool(t4);
System.out.println();
PersonTool.printTool(t5);
System.out.println();
PersonTool.printTool(t6);
System.out.println("----------------------------------------------------");
Worker w4 = new Worker();
Worker w5 = new Worker();
Worker w6 = new Worker();
PersonTool.printTool(w4);
System.out.println();
PersonTool.printTool(w5);
System.out.println();
PersonTool.printTool(w6);
System.out.println("----------------------------------------------------");
Nurse n4 = new Nurse();
Nurse n5 = new Nurse();
Nurse n6 = new Nurse();
PersonTool.printTool(n4);
System.out.println();
PersonTool.printTool(n5);
System.out.println();
PersonTool.printTool(n6);
System.out.println("************************完************************");
}
}
复制代码
作者:
贾森
时间:
2015-6-28 20:05
不错 很详细
作者:
xuhao3622603
时间:
2015-6-28 21:27
多态很牛的,后面迭代器,比较器都用到了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2