java笔记--动物:具体猫和狗以多态方式写出

动物:猫和狗;

1 在动物中类的下面写上 动物具有的两个属性, 1 名 2 重量;

2 一个空的构造方法是必须紧跟其后的.再来一个构造方法,里面继承父类和继承本类;

3 再把private的几个属性给get和set权限,使他们可以按方式调用和修改;

 1 package com.q1.q11;
 2 
 3 public class Animial {
 4     private String aname;
 5     private double weight;
 6     public Animial() {
 7     }
 8     
 9     public Animial(String aname, double weight) {
10         super();
11         this.aname = aname;
12         this.weight = weight;
13     }
14     
15     public void Dy() {
16         System.out.println("这个动物的名字是:" + aname);
17         System.out.println("这个动物的体重是:" + weight);
18     }
19 
20     //get set
21     public String getAname() {
22         return aname;
23     }
24 
25     public void setAname(String aname) {
26         this.aname = aname;
27     }
28 
29     public double getWeight() {
30         return weight;
31     }
32 
33     public void setWeight(double weight) {
34         this.weight = weight;
35     } 
36     

 

4  //我们要再建这个动物的具体类,再造一个cat and dog; 在新建的类中的超类(Superclass)这里,写上包的地址和

                  要继承的那个animal的类名:形式如com.q1.q11.Animial    点击确定直接建类

  4.1在 Cat 和Dog类下面 都可以再另写成员变量.  写上构造方法,空的和赋值的.再写一个一般方法打印出我们给的这几个属性.

    别忘了给这个类里新定义的成员变量给一个set 和get.

 1 package com.q1.q11;
 2 
 3 public class Cat extends Animial {
 4     //类里面也有成员变量,下面写构造方法
 5    private String size;
 6    public Cat () {
 7    }
 8    public Cat (String aname, double weight, String size) {
 9        super(aname,weight);
10        this.size = size;
11    }
12    public void Dy() {
13         System.out.println("this猫的名字是:" + super.getAname());
14         System.out.println("这只猫的体重是:" + super.getWeight());
15         System.out.println("这只猫咪的型号是:" + size);
16     }
17    //给size 生成get set方法.大小写必须写对
18 public String getSize() {
19     return size;
20 }
21 public void setSize(String size) {
22     this.size = size;
23 }
24    
25 }

Dog中写的框架也是一样的,如下

 1 package com.q1.q11;
 2 
 3 public class Dog extends Animial {
 4     
 5     private String size;
 6     
 7        public Dog () {
 8        }
 9        public Dog (String aname, double weight, String size) {
10            super(aname,weight);
11            this.size = size;
12        }
13        public void Dy() {
14             System.out.println("狗狗的名字是:" + super.getAname());
15             System.out.println("狗狗的体重是:" + super.getWeight());
16             System.out.println("这只狗狗的型号是:" + size);
17         }
18     public String getSize() {
19         return size;
20     }
21     public void setSize(String size) {
22         this.size = size;
23     }
24       
25 
26 }

main方法按下面这样就可以调用出来了,但每次只能调用一个,或者可以把每个子类的调用都写出来.

 但 如果动物这个类下面的子类写了好多小动物呢?所以还可以采用多态的方法,

如下下面:

 1 package com.q1.q11;
 2 
 3 public class Main {
 4 
 5     public static void main(String[] args) {
 6         Animial ani = new Cat();//父类的引用指向子类对象
 7         ani.setAname("可爱滴猫咪");
 8         ani.setWeight(35);  
 9         //上面这种 点 调用不出来子类里面自己写的属性,
10         //只能调用父类的属性,想要调用就强转(如下)
11         ani.Dy();
12         Cat cater = (Cat)ani;
13         cater.setSize("中型");
14         cater.Dy();
      }
    }

多态方法:

main 中

package com.q1.q11;

public class Main {

    public static void main(String[] args) {
            Cat cater  = new Cat ("可爱猫咪",40,"中小型");
        Dog doger  = new Dog("帅气的犬",50,"中型");
        
        Test t = new Test();
        t.DIX(doger);
        t.DIX(cater);

    }

}    

再新建的一个Test中写:  

 

 1 package com.q1.q11;
 2 
 3 public class Test {
 4     
 5     public void  DIX( Animial ani) {
 6         if(ani instanceof Cat) {
 7             Cat kk = (Cat)ani;   //如果传过来的动物的某个对象是猫类,就把它强转为猫这个类;
 8             kk.Dy();
 9         }else if(ani instanceof Dog) {
10             Dog dd = (Dog)ani;   //如果传过来的动物的某个对象是狗类,就把它强转为狗这个类;
11             dd.Dy();
12         }else {
13             ani.Dy();   //其他的则调用动物这个对象本身的方法来显示
14         }
15         
16     } 
17 }

 

posted @ 2017-11-20 21:43  子言小竹  阅读(1649)  评论(0编辑  收藏  举报