多态
1.定义: 在执行期间(而非编译期间)判断所引用的对象的实际类型而调用其相应的方法
2 直接上代码 跟直观 走起喽.................
/** * 父类 * @author win7 * */ public class Animal { private String name; public Animal(String name){ this.setName(name); } public void enjoy(){ System.out.println("叫声........"); } public String getName() { return name; } public void setName(String name) {
this.name = name; } }
/** * 子类 猫 * @author win7 * */ public class Cat extends Animal { private String eyecolor; public Cat(String n,String c) { super(n); eyecolor=c; } public String getEyecolor() { return eyecolor; } public void setEyecolor(String eyecolor) { this.eyecolor = eyecolor; } public void enjoy(){ System.out.println("名字是"+getName()+"颜色是"+getEyecolor()); System.out.println("猫叫声...喵喵....."); } }
/** * 子类 狗 * @author win7 * */ public class Dog extends Animal { private String fulcolor; public Dog(String n,String c) { super(n); fulcolor=c; } public String getFulcolor() { return fulcolor; } public void setFulcolor(String fulcolor) { this.fulcolor = fulcolor; } public void enjoy(){ //对父类的叫声不满意 重写该方法 System.out.println("名字是"+getName()+"颜色是"+getFulcolor()); System.out.println("狗叫声...汪汪....."); }
/** * 女孩 * @author win7 * */ public class Lady { private String name; private Animal pet; public String getName() { return name; } public void setName(String name) { this.name = name; } public Animal getPet() { return pet; } public void setPet(Animal pet) { this.pet = pet; } public Lady(String name, Animal pet){ this.name=name; //this 关键字用来区分重名变量和形参 this.pet=pet; } // 女孩买了个宠物 买的什么宠物对象就有什么样的特性 public void myPetEnjoy(){ System.out.println(getName()+"领养了"+getPet()); pet.enjoy();
/** * 测试类 * @author win7 * */ public class Text { public static void main(String[] args) { Cat c=new Cat("catname","blue");//创建一个猫的实例 Dog d=new Dog("dogname","yellow");;//创建一个狗的实例 Lady l1=new Lady("ladyname",c); //创建女孩实例 然后把 猫的对象作为参数传递给女孩中的构造方法参数 Lady l2=new Lady("ladyname",d); l1.myPetEnjoy(); l2.myPetEnjoy(); } }
控制台打印输出
ladyname领养了cn.arry.Cat@592fa617 //因为调用的猫和狗的实例作为参数调用 所以打印出来的谁毛的内存地址 但是大家理解知道是个猫就可以了
名字是catname颜色是blue
猫叫声...喵喵.....
ladyname领养了cn.arry.Dog@47415dbf
名字是dogname颜色是yellow
狗叫声...汪汪.....