面向对象之多态
个人理解为:
多态的定义要在 继承、重写的基础之上而言的一个面向对象的特性,即某一个父类存在多种形态,而这种形态就是子类。
多态的存在两种转型 一种则使默认的向上转型,如果子类重写了父类的方法,那么在调用方法时,首先在父类中找,如果父类存在该方法,那么就调用父类中的方法,否则调用子类的方法。
父类类型 变量名 = new 子类类型();
如:Animal a = new Cat();
另一种转型则是向下转型:
如果是父类像子类进行转型时,则需要进行强制转换。一个已经向上转型的子类对象,将父类引用转为子类引用,可以使用强制类型转换的格式,便是向下转型。
如:
子类类型 变量名 = (子类类型) 父类变量名;
如:Cat c =(Cat) a;
小练习:
1、教师拥有教师的信息
2、学院拥有学院的信息
3、学院的打印机能够以完成对教师信息的打印
4、学院的打印机能够完成对学院信息的打印
5、要求系统拥有良好的维护性和可扩展性
解题思路:
为了使系统有一个良好的维护性和可扩展性,
那么 打印机的种类应该有 3D打印机、激光打印机、彩色打印机、黑白打印机等等多种打印机。
那么 所要打印的信息类型也是多种多样的,有学生的信息、教师的信息、求职者的信息等等信息。
所以:
interface printers
public interface printers { public abstract String show(); }
public class Teacher implements printers { @Override public String show() { return "教师信息"; } }
College.java
public class College implements printers { private Prints prints; public void setPrints(Prints prints) { this.prints = prints; } public void prints(printers printers){ prints.printf(printers); } @Override public String show() { return "学院信息"; } }
public interface Prints { public void printf(printers printers); }
public class BalckPrints implements Prints { @Override public void printf(printers printers) { System.out.println("Start print Balck ........."); System.out.println(printers.show()+"正在打印.........."); } }
public class ColorPrints implements Prints { @Override public void printf(printers printers) { System.out.println("Start print color....."); System.out.println(printers.show()+"正在打印........"); } }
public class Test { public static void main(String[] args) { printers printers=new Teacher(); Prints prints=new BalckPrints(); prints.printf(printers); } }
那么这样一来就可以实现系统的可维护性和扩展性,比如说 还可以增加更多的打印者和更多的打印机类型。