对象的上转型对象体现了多态。多态的作用:将不同的子类对象统一看做父类,屏蔽了不同子类之间的差异,有子类到父类,有特殊到一般,是程序变得通用。
public class TestPloy{
public sataic void main(String[] args){
Dog a0=new Dog();
Cat a1=new Cat();
Tiger a2=new Tiger();
Sheep a3=new Sheep();
Wolf a4=new Wolf();
Mouse a5=new Mouse();
Snake a6=new Snake();
Monkey a7=new Monkey();
Cock a8=new Cock();
YelloMouseWolf a9=new YelloMouseWolf();
a0.eat();
a1.eat();
a2.eat();
a3.eat();
a4.eat();
a5.eat();
a6.eat();
a7.eat();
a8.eat();
a9.eat();
}
}
class Animal{
public void eat(){
}
}
class Dog extends Animal{
public void eat(){
System.out.println("Dog eat...")
}
}
class Cat extends Animal{
public void eat(){
System.out.println("Cat eat...")
}
}
class Tiger extends Animal{
public void eat(){
System.out.println("Tiger eat...")
}
}
class Sheep extends Animal{
public void eat(){
System.out.println("Sheep eat...")
}
}
class Wolf extends Animal{
public void eat(){
System.out.println("Wolf eat...")
}
}
class Mouse extends Animal{
public void eat(){
System.out.println("Mouse eat...")
}
}
class Snake extends Animal{
public void eat(){
System.out.println("Snake eat...")
}
}
class Monkey extends Animal{
public void eat(){
System.out.println("Monkey eat...")
}
}
class Cock extends Animal{
public void eat(){
System.out.println("Cock eat...")
}
}
class YelloMouseWolf extends Animal{
public void eat(){
System.out.println("YelloMouseWolf eat...")
}
}
从上面的程序可以看出比较麻烦,下面是用多态来简化后的程序
public class TestPloy{
public sataic void main(String[] args){
Animal[] a=new Animal[10];//将子类对象统一看做父类对象
a[0]=new Dog();
a[1]=new Cat();
a[2]=new Tiger();
a[3]=new Sheep();
a[4]=new Wolf();
a[5]=new Mouse();
a[6]=new Snake();
a[7]=new Monkey();
a[8]=new Cock();
a[9]=new YelloMouseWolf();
for(int i=0;i<a.length;i++){
a[i].eat();
}
}
class Animal{
public void eat(){
}
}
class Dog extends Animal{
public void eat(){
System.out.println("Dog eat...")
}
}
class Cat extends Animal{
public void eat(){
System.out.println("Cat eat...")
}
}
class Tiger extends Animal{
public void eat(){
System.out.println("Tiger eat...")
}
}
class Sheep extends Animal{
public void eat(){
System.out.println("Sheep eat...")
}
}
class Wolf extends Animal{
public void eat(){
System.out.println("Wolf eat...")
}
}
class Mouse extends Animal{
public void eat(){
System.out.println("Mouse eat...")
}
}
class Snake extends Animal{
public void eat(){
System.out.println("Snake eat...")
}
}
class Monkey extends Animal{
public void eat(){
System.out.println("Monkey eat...")
}
}
class Cock extends Animal{
public void eat(){
System.out.println("Cock eat...")
}
}
class YelloMouseWolf extends Animal{
public void eat(){
System.out.println("YelloMouseWolf eat...")
}
}
多态的常用方法:
1.把多态用在方法参数上,形参可以是父类引用,实参可以传子类对象。
m(A a):可以用A的任何子类对象作为参数
2.把多态用在方法的返回值上
A m():m方法完全可以返回A的某个子类对象
public class TestPloy{
public sataic void main(String[] args){
Dog d=new Dog();
m1(d);
Cat c=new Cat();
m1(c);
Animal a1=m2(10);
Animal A2=m2(11);
}
static void m1(Animal a){//多态用在方法的参数上
a.eat();
}
static Animal m2(int k){//多态用在方法的返回值上
if(k%2==0) return new Dog();
else return new Cat();
}
}
class Animal{
public void eat(){
}
}
class Dog extends Animal{
public void eat(){
System.out.println("Dog eat...")
}
}
class Cat extends Animal{
public void eat(){
System.out.println("Cat eat...")
}
}