当前位置: 代码迷 >> 综合 >> 多态2
  详细解决方案

多态2

热度:98   发布时间:2023-10-31 16:18:04.0

 多种状态:就是指一个对象可以有多种状态(他在继承体系中的位置变化)

 D->C->B->A->Animal,位置的变化只能是向上变 但不能低于自身,对于C而言可以当做B来看,也可以当做A来看也可以当Animal,小明 -->男人-->人-->动物, 小明的学校开家长会,小明不想让他爸爸去,他让大明去,大明就是小明他哥,大明冒充Dad去参加家长会的话,那么所表现出来的行为,是不是应该符合他爸行为,不同的视角,不同的角色, 无论是在哪个视角场合,对象本身变了没有?只不过我们需要对象在不同的场合表现出相对应的行为,  在Java当中 多态代码表现 就是 父类引用指向子类的对象

package test2;public class DuoTaiDemo01 {public static void main(String[] args) {Son s=new Son(); //子类的四个方法都能够打印出来 s.chouyan();s.hejiu();s.tangtou();s.lol();Dady d =new Son();/*** 只能打印出子类继承父类的方法内容,不能打印出子类特有的方法*  Dady d =new Son();这就是父类引用指向子类的对象*/	  d.chouyan();d.hejiu();d.tangtou();				   }
}class Dady{void chouyan() {System.out.println("爸爸抽烟");	  }void hejiu(){System.out.println("爸爸喝酒");	}void tangtou() {System.out.println("爸爸烫头");	}	  }class Son extends Dady{@Overridevoid chouyan() {// TODO Auto-generated method stubSystem.out.println("儿子抽烟");}@Overridevoid hejiu() {// TODO Auto-generated method stubSystem.out.println("儿子喝酒");}@Overridevoid tangtou() {// TODO Auto-generated method stubSystem.out.println("儿子烫头");}void lol() {System.out.println("儿子lol");		}} 

 多态的前提:继承 重写
 多态的好处:对代码的功能进行了可扩展性

子类对象可以当做父类对象去使用 但是有限制,只能调用父类函数或重写的函数, 不能使用子类特有的行为

多态当中 成员变量的特点:只能访问父类中的成员变量
 多态当中 成员函数的特点:
        如果子类没有重写 且父类中有 调用父类的
        如果子类有重写 调用子类重写的
        如果不存在重写 父类没有 那就报错了!

 

package test2;
public class DuoTaiDemo02 {public static void main(String[] args) {dog d =new dog();cat c =new cat();Pig p =new Pig();/*** d.eat();c.eat();p.eat();*/
feed(d);//相当于Animal a =new dog()父类引用指向子类对象,向上转型
feed(c);//相当于Animal a = new Cat()父类引用指向子类对象,向上转型
feed(p);//相当于Animal a =new Pig()父类引用指向子类对象,向上转型	 }public static void feed(Animal a) {a.eat();//向上转型if(a instanceof Pig) {Pig p = (Pig)a;p. gongBaiCai();}	/*** Animal a =new dog()* Animal a =new Pig()*/}
}
class Animal{void eat() {}void jiao() {}	
}
class Pig extends Animal{void eat() {System.out.println("猪啥都吃。。。。");	}void jiao() {System.out.println("猪哼哼。。。");}void gongBaiCai() {System.out.println("猪共白菜。。。。");}
}
class dog extends Animal{void eat() {System.out.println("狗吃狗粮。。。。");}void jiao() {System.out.println("狗汪汪。。。。");}void lookdoor() {System.out.println("狗看家。。。。");}
}
class cat extends Animal{void eat() {System.out.println("狗吃鱼。。。。");}void jiao() {System.out.println("狗喵喵。。。。");}void catchMouse() {System.out.println("狗捉老鼠。。。。");	}
}

要注意向下向上转型的问题

 

 

  相关解决方案