女孩 鸟交互--java


import org.omg.CORBA.PUBLIC_MEMBER;


 


public class Girl {


 


  public Girl(){}//空参构造方法


  /*public void play(Cat cat){


    System.out.println("女孩跟"+ cat.getPetName() + "");


  }


 


  public void play(Dog dog){


    System.out.println("女孩跟"+ dog.getPetName() + "");


  }*/


  public void  play(Pet pet) { //将值传入一个Pet类型的惨数里, //多态(继承的多态)


                             //调用同一个方法,根据不同对象传值,而得出不同的结果


    System.out.println("女孩子跟" + pet.getPetName() + "一起玩");


   


    //来判断该引用类型变量(pet)所“指向”的对象(Cat)是否属于该类或该类的子类


    if(pet instanceof Cat){


      //如果是猫   猫叫


      //不行:cry 是猫类的方法 pet Pet类的对象引用,Pet类没有cry方法


      //pet.cry();


      //向下转型


      Cat cat = (Cat)pet;


      cat.Cry();


    }


    //如果是狗  给骨头啃


    if (pet instanceof Dog){


      Dog dog = (Dog)pet;


      dog.eat();


     


    }


  }


 


   


  public static void main(String [] args ) {


    Girl girl = new Girl();//创建女孩这个对象


   


    Cat cat = new Cat();//创建猫这个对象


    cat.setPetName("咪咪");//把名字给他,传回去setPetName方法那里。


    girl.play(cat);//女孩和猫的交互,数据传入play这个方法里,然后输出。


   


    Dog dog = new Dog();


    dog.setPetName("旺财");


    girl.play(dog);


  }


 


 


}


 


 


 


package com.lijie.lianxi1;


 


public class Pet {


  public String petName;


  public String petColor;


 


 


 


  public String getPetName() {//定义好成员变量后,Shift+alt+s,界面出来后按r键使用get,set方法


    return petName;


  }


 


 


  public void setPetName(String petName) {


    this.petName = petName;


  }


 


 


 


  public StringgetPetColor() {//获取petcolor


    return petColor;


  }


 


 


 


  public void setPetColor(String petColor) {//初始化petcolor


    this.petColor = petColor;


  }


 


 


  public void petMethod(){


    System.out.println("Pet.petMethod()");


  }


 


 


  public void method(){


    System.out.println("Pet.method()");


  }


 


 


 


  public static void main(String[] args) {


   


  }


 


}


 


 


 


package com.lijie.lianxi1;


 


public class Dog extends Pet {


 


 


  //Dog dog = new Dog();//有个默认的构造方法,如果要调用,就会与dog对象形成死循环


  public Dog(){}


  public void eat(){


    System.out.println("给狗骨头吃");


  }


  public void dogMether(){ //重写父类的方法,拓展所需要的功能


    System.out.println("Dog.dogMether");


  }


  public void mether(){  //重写父类的方法,拓展所需要的功能


    System.out.println("Dog.mether ");


  }


 


  public static void main(String[] args) {


   


   //向上转型  自动的


  // 子类转父类


  //知识点1: 可以访问父类的属性、方法,但是无法访问子类的属性或者方法


  Pet dog1 = new Dog(); //因为创建的对象是赋值给Pet这个属性


  dog1.petName = "宠物狗。。";


  System.out.println(dog1.petName);//所以打印是.petName而不是.dogName


  //知识点1


  //System.out.println(dog1.dogName);出错


 


  //知识点2


  // java 程序运行包括2步:


  // 1、编译, dog1 当做Pet对象进行编译, 因为 pet类中没有dogName 属性,所以


  //    打印dog1.dogName 是报错


  // 2、执行的时候, dog1 指向的new Dog() 即开辟的空间是 Dog 所以 dog1.method()


  //    执行的是 dog类定义 method方法


  //     Dog.method()


  dog1.method();//调用的是父类的方法,因为上面new的对象的属性属于Pet。否则调用的是本类中的方法


 


  //向下转型    强制性的


      // 父类类型转为子类型需要显示转换


      //java.lang.ClassCastException: com.qianfeng.day09.demo4.Pet


      //cannot be cast to com.qianfeng.day09.demo4.Dog


      //Dog dog = (Dog) new Pet();


      //dog.dogMethod();


      //dog.method();


     


      //强转注意点:必须明确知道,父类变量具体指向与哪一个子类类型,才能强转


      //如果,直接将父类型转换为子类型,会报异常:java.lang.ClassCastException


      Pet pet = new Dog();//要先把Dog属性转为Pet属性,再强转。


      Dog dog = (Dog)pet;


 


 


 


  }


}


 


 


 


package com.lijie.lianxi1;


 


import java.security.CryptoPrimitive;


 


public class Cat extends Pet {


 


  public Cat(){}


  public void Cry(){


    System.out.println("喵喵叫了");


   


  }


 


 


        


   


 


}


 


 


 


你可能感兴趣的:(java实例)