黑马程序员技术交流社区

标题: 多态练习终极版 [打印本页]

作者: 赵存金    时间: 2015-9-27 18:29
标题: 多态练习终极版
/*
*                 猫狗案例:
* 具体实物:
*                猫,狗
*共性:
*                名字,年龄,吃饭

*分析:从具体到抽象
*                猫:
*                        成员变量:姓名,年龄
*                        构造方法:有参,无参
*                        成员方法:吃饭(猫吃鱼)
*                狗:
*                        成员变量:姓名,年龄
*                        构造方法:有参,无参
*                        成员方法:吃饭(狗吃肉)

*因为猫和狗有共性的东西,所以提取出了一个父类,定义名字Animal
*但是由于猫和狗的吃饭的内容不一样,吃饭的方法定义为抽象的。
*有因为这个方法是抽象的,所以这个类也必须是抽象的类(abstract).
*
*                抽象的动物类:
*                        成员变量:姓名,年龄
*                        构造方法:有参,无参
*                        成员方法:吃饭
*                        :
*               
*实现:从抽象到具体
*                 动物类:
*                         成员变量:姓名,年龄
*                        构造方法:有参,无参
*                        成员方法:吃饭 (抽象的方法用abstract修饰)
*                狗类:(继承自父类)
*                        重写吃饭方法();
*                猫类:(继承自父类)
*                        重写吃饭方法();;
*
*/
//定义抽象的动物类
abstract class animal{
        //名字
         private String Name;
        //年龄
        private int age;
        //构造方法
        public animal(){}
        //方法1  构造方法初始化Name和Age
        public animal(String Name,int age){
                this.Name = Name;
                this.age = age;
        }
        //抽象的吃 方法
        public abstract void eat();
        //方法2  SetXxx/GetXxx姓名和年龄的赋值
        public void SetName(String Name){
                this.Name = Name;
        }
        public String GetName(){
                return Name;
        }
        public void SetAge(int age){
                this.age = age;
        }
        public int GetAge(){
                return age;
        }
       
}
//定义猫类
class Cat extends animal {
         public void eat(){
                 System.out.println("猫吃鱼");
                 }
         public Cat(){}
         public Cat(String Name, int age){
                 super(Name,age);
         }
         public void play(){
                 System.out.println("躲猫猫");
         }
}
//定义狗类
class Dog extends animal {       
                 public Dog(){}
                 public  Dog(String Name, int age){
                         super(Name,age);
                 }
                 public void eat(){
                         System.out.println("狗吃肉");
                 }
                 public void play(){
                         System.out.println("旺财追皮球");
                 }
         
}
public class adstractTest {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                //方法1
                Dog d = new Dog();
                d.SetName("旺财");
                d.SetAge(3);
                System.out.println(d.GetName()+d.GetAge());
                d.eat();
                System.out.println("---------------");
                //方法2
                Cat c = new Cat("汤姆",2);
                System.out.println(c.GetName()+c.GetAge());
                c.eat();
                System.out.println("---------------");
                //多态版
                animal a = new Dog();
                a.SetName("旺财_多态");
                a.SetAge(30);
                System.out.println(a.GetName()+a.GetAge());
                a.eat();
                System.out.println("---------------");
                animal a1 = new Cat("汤姆_多态",20);
                System.out.println(a1.GetName()+a1.GetAge());
                //向下转换
                Cat a2 = (Cat)a1;
                a2.play();
                Dog a3 = (Dog)a;
                a3.play();
               
               
               
               
                }

}

作者: 赵存金    时间: 2015-9-27 18:30
多态学了3天了。。。
作者: 向阳啊    时间: 2015-9-27 18:33
好复杂的样子.....




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2