应用在方法的形参中
package poly;
public class PolyUsedForParameters {
public static void main(String[] args) {
/*多态的基本形式*/
Person person = new Chinese();
person.eat();
/*
* 编译看左:是否编译报错要看等号左边的类中有没有调用的方法
* 运行看右:运行时首先去等号右边的类中找对应的方法,没有的话就去等号左边的类中找
* */
System.out.println("=============================");
/*多态的进阶形式*/
showEat(new Janpan());
}
/*父类类型作为方法形式参数,子类对象为实参。*/
private static void showEat(Person person) {//传参后实际是 :Person person = new Janpan(); 父类引用指向子类对象。
person.eat();
}
}
class Person {
public void eat() {
System.out.println("人吃饭");
}
}
class Chinese extends Person {
@Override
public void eat() {
System.out.println("中国人吃饭");
}
}
class Janpan extends Person {
@Override
public void eat() {
System.out.println("日本人吃饭");
}
}
应用在数组中
package poly;
public class PolyUsedForArray {
public static void main(String[] args) {
Person1[] per = new Person1[2];
/*父类类型的数组存放子类类型的数据*/
per[0] = new Chinese1();
per[1] = new Janpan1();
/*多态的应用形式*/
for (Person1 p : per
) {
p.eat();//Person1 p = per[0] = new Chinese1();
}
}
}
class Person1 {
public void eat() {
System.out.println("人吃饭");
}
}
class Chinese1 extends Person1 {
@Override
public void eat() {
System.out.println("中国人吃饭");
}
}
class Janpan1 extends Person1 {
@Override
public void eat() {
System.out.println("日本人吃饭");
}
}
应用在返回值中
package poly;
public class PolyUsedForReturn {
public static void main(String[] args) {
PolyUsedForReturn polyUsedForReturn = new PolyUsedForReturn();
Person2 perC = polyUsedForReturn.selectPerson("中国人");
perC.eat();
Person2 perJ = polyUsedForReturn.selectPerson("日本人");
perJ.eat();
Person2 per = polyUsedForReturn.selectPerson("人");
per.eat();
}
/**
* 方法的返回值类型是父类类型,但是可以返回子类类型
* @param 人种
* @return 对应人种的对象
*/
public Person2 selectPerson(String race) {
if (race.equals("中国人")) {
return new Chinese2();
} else if (race.equals("日本人")) {
return new Janpan2();
} else {
return new Person2();
}
}
}
class Person2 {
public void eat() {
System.out.println("人吃饭");
}
}
class Chinese2 extends Person2 {
@Override
public void eat() {
System.out.println("中国人吃饭");
}
}
class Janpan2 extends Person2 {
@Override
public void eat() {
System.out.println("日本人吃饭");
}
}