多态(三)

1.多态
  1.1多态:一种事物的多种形态
  1.2多态的表现
    行为(方法)多态:重写和重载
    引用多态(动态绑定):编译时的类型和运行时的类型不一致的这种现象叫动态绑定
      eg:父类=子类 Pet p=new Dog();
  1.3向上转型和向下转型
    向上转型:父类=子类
      eg:Pet p=new Dog();
    向下转型:子类=(子类)父类
      eg:Dog d=(Dog)p;
    注意:java.lang.ClassCastException:类型转换异常
      父类的运行时类型跟要转成子类的类型的不一致
    注意:引用多态存在继承关系


2.instanceof
  语法:对象A instanceof 类型B
    判断对象A的类型是否是类型B,如果是就返回true,否则返回false
    eg:d instanceof Dog


3.实现多态的两种形式
  a.使用父类作为方法形参实现多态
    eg:public void paly(Pet p){...};
  b.使用父类作为方法返回值实现多态
    eg:public Pet getPet(int type){...};

 

运行结果:

 1 package Day10三;
 2 
 3 public class Dog extends Pet{
 4     private int strain;        //品种
 5     
 6     //语法:public 类名(参数列表){ }
 7     //构造方法(默认构造方法)
 8     public Dog(){
 9         
10     }
11     
12     public void catchingFlyDisc(){
13         System.out.println("--接飞盘--");
14         
15         //健康值-10
16         int health=getHealth();
17         health=health-10;
18         setHealth(health);
19 
20         //亲密度+5
21         int love=getLove();
22         love=love+5;
23         setLove(love);
24     }
25     
26     public void eat() {
27         System.out.println("---吃狗粮---");
28     }
29     
30     public void setStrain(int strain){
31         this.strain=strain;
32     }
33     public int getStrain(){
34         return strain;
35     }
36     
37 }
Dog类
 1 package Day10三;
 2 
 3 public class Penguin extends Pet {
 4     private String sex;            //性别
 5     //常量---变量
 6     public static final String SEX_MALE="Q仔";
 7     public static final String SEX_FEMALE="Q妹";
 8     public Penguin() {
 9 
10     }
11     
12     public void swimming(){
13         System.out.println("--游泳--");
14         
15         //健康值-10
16         int health=getHealth();
17         health=health-10;
18         setHealth(health);
19 
20         //亲密度+5
21         int love=getLove();
22         love=love+5;
23         setLove(love);
24     }
25     
26     public void eat() {
27         System.out.println("---吃鱼---");
28     }
29     public String getSex() {
30         return sex;
31     }
32 
33     public void setSex(String sex) {
34         this.sex = sex;
35     }
36 }
Penguin类
 1 package Day10三;
 2 /**
 3  * 父类
 4  * @author Administrator
 5  *
 6  */
 7 public abstract class Pet {
 8     private int age;                    //年龄
 9     private String name;                //昵称
10     private int health=90;                    //健康值
11     private int love=90;                    //亲密度
12     public Pet() {
13         
14     }
15     //打印信息
16     public void print(){
17         System.out.println("名字:"+this.name+",年龄:"+this.age+",健康值:"+this.health+",亲密度:"+this.love);
18     }
19     
20     //抽象方法
21     public abstract void eat();
22     
23     public int getAge() {
24         return age;
25     }
26     public void setAge(int age) {
27         this.age = age;
28     }
29     public String getName() {
30         return name;
31     }
32     public void setName(String name) {
33         this.name = name;
34     }
35     public int getHealth() {
36         return health;
37     }
38     public void setHealth(int health) {
39         this.health = health;
40     }
41     public int getLove() {
42         return love;
43     }
44     public void setLove(int love) {
45         this.love = love;
46     }
47     
48 }
父类
 1 package Day10三;
 2 
 3 public class Test {
 4 
 5     public static void main(String[] args) {
 6         
 7         Dog d=new Dog();
 8         d.setName("灰灰");
 9         
10         Penguin p=new Penguin();
11         p.setName("白白");
12         
13         Pet pet=d;    //父类=子类
14         System.out.println(pet.getName());
15         
16         pet=p;        //父类=子类
17         System.out.println(pet.getName());
18         
19     }
20 
21 }
测试类

 

posted @ 2017-06-18 20:35  眼泪,还是流了  阅读(181)  评论(0编辑  收藏  举报