多态思想并举例

来源:互联网 发布:笑傲江湖 朝代 知乎 编辑:程序博客网 时间:2024/05/21 21:34

/**
*多态:可以理解为事物存在的多种体现形态。
*比如人:男人 女人
* 动物:猫 狗
* 猫 x = new 猫();
* 动物 x = new 猫();
*对象的多态性
*
*1,多态的基本体现
* 代码体现形式: 父类的引用指定自己的子类对象
* 父类的引用也可以引用自己的子类对象
*2,多态的前提
*必须是类与类之间有关系 要么继承 要么实现
* 通常还有一个前提:存在覆盖
*3,多态的好处
*多态的出现大大的提高了程序的扩展性
*
*4,多态的应用
*
*5,弊端:
* 提高了扩展性,但是只能使用父类的引用访问父类的功能中的成员
*6,多态的出现代码的特点(多态的使用的注意事项)
* */
/*
* 动物
* 猫,狗
* */
abstract class Animal{

abstract void eat();//都得吃饭

}
class Cat extends Animal{

public void eat(){    System.out.println("Eat Fish");}public void catchMouse(){    System.out.println("Catch Mouse");}

}
class Dog extends Animal{

@Overridepublic void eat() {    // TODO Auto-generated method stub    System.out.println("Eat 骨头");}public void kanJia(){    System.out.println("kan 家"); }

}
class Pig extends Animal{

@Overridepublic void eat() {    // TODO Auto-generated method stub    System.out.println("Eat 饲料");}public void gongDi(){    System.out.println("拱地");}

}
//————————————————-
public class DuoTaiDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

    Cat c = new Cat();    c.eat();    Animal e = new Cat();//一个对象具备了多种形态造成的 猫类型也是动物类型 多态在程序中的表现    e.eat();    Animal a = new Cat();    a.eat();//类型提升 从Cat到Animal型 也称为向上转型    //如果想要调用猫的特有方法时 如何操作?    ///////Cat c1 = new Cat();    //强制将父类的引用转成子类类型    Cat f = (Cat)a;//强转  向下转型 可强制转换    f.catchMouse();    //function(c);    //Dog d = new Dog();    /*千万不要出现以下操作:就是父类对象转化成子类类型     * 我们能转换的是父类应用指向了自己的子类对象时,该应用可以被提升,也可以被强制转换     * Animal a = new animal();     * Cat c = (Cat)a;     * 多态自始至终都是子类对象在做变化     * */    function(new Cat());//Animal a = new Cat();    function(new Dog());//Animal a = new Dog();    function(new Pig());//Animal a = new Pig();    /*毕姥爷 x = new 毕老师();     * x.讲课();讲的是子类 java     * 毕老师 y = (毕老师)x;     * y.看电影(); 毕老师自始至终在变在变     * */    function(new Dog());// java.lang.ClassCastException 类型转换异常}public static void function(Animal a){//函数封装  提高函数的扩展性    a.eat();    if(a instanceof Animal){        System.out.println("ahhhhh");    }    else if(a instanceof Cat){//instanceof是关键字   判断他是否所属类型    Cat c = (Cat)a;    c.catchMouse();   }else if(a instanceof Dog){    Dog c = (Dog)a;    c.kanJia();      }}/*public static void function(Cat c){//cat类     c.eat();} public static void function(Dog d){//dog类     d.eat();} public static void function(Pig p){//pig类     p.eat();} */

}
/*基础班的学生:
* 学习 睡觉
*高级班的同学:
* 学习 睡觉
*
*可以将这两类的事物进行抽取
*将对象调用简单化 找共同点在封装类
* */
abstract class Student1{
public abstract void study();
public void sleep(){
System.out.println(“躺着睡”);
}
}
class BaseStudent extends Student1{

public void study(){    System.out.println("基础课程学习");}public void sleep(){    System.out.println("坐着睡");}

}
class AdvStudent extends Student1{

@Overridepublic void study() {    // TODO Auto-generated method stub    System.out.println("高级课程学习");}

}
class DoStudent{
public void doSome(Student1 stu){
stu.study();
stu.sleep();
}
}
public class DuoTaiDemo1 {

/** * @param args */public static void main(String[] args) {    // TODO Auto-generated method stubBaseStudent bs = new BaseStudent();    //bs.study();    //bs.sleep();    //AdvStudent as = new AdvStudent();    //as.study();    //as.sleep();DoStudent ds = new DoStudent();    ds.doSome(new BaseStudent());    ds.doSome(new AdvStudent());}

}

0 0
原创粉丝点击