随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)、QQ技术交流群(183198395)。
package com;
public class 唐僧 {
public void 发布命令(徒弟 x) {
x.做事();
}
public static void main(String[] args) {
// 多态参数
// 唐僧 t=new 唐僧();
// t.发布命令(new 孙悟空());
// 多态集合
徒弟[] x = new 徒弟[3];
x[0] = new 孙悟空();
x[1] = new 猪八戒();
x[2] = new 沙僧();
for (int i = 0; i < x.length; i++) {
x[i].做事();
}
// 抽象类不能产生对象(实例化),抽象类变量只能指向实现了所有抽象方法的子类对象。
// 徒弟 t1=new 徒弟();//编译错误
// 徒弟 s=new 沙僧();
}
}
/*
* 如果一个方法只有方法定义,没有方法具体的内容,该方法就叫抽象方法。用关键字abstract定义。 抽象方法不能定义为private和static。
* 拥有抽象方法的类叫做抽象类。 如果一个具体类要继承于抽象类,那么必须实现抽象类中定义的所有抽象方法。除非子类也是抽象类
* 抽象类中可以有抽象方法,也可以有具体方法。具体方法可重写可不重写,但是抽象方法必须重写。
*/
abstract class 徒弟 {
public abstract void 做事();
public void 化缘() {
System.out.println("讨饭去");
}
}
class 孙悟空 extends 徒弟 {
@Override
public void 做事() {
System.out.println("打妖怪");
}
}
class 猪八戒 extends 徒弟 {
@Override
public void 做事() {
System.out.println("牵马");
}
}
class 沙僧 extends 徒弟 {
@Override
public void 做事() {
System.out.println("挑担");
}
}