package com.pb.demo6; public abstract class Pet { private String name; //宠物名字 private String sex; //宠物性别 private int health; //宠物的健康值 //宠物看病的方法 abstract void toHospital(); public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getHealth() { return health; } public void setHealth(int health) { this.health = health; } }
package com.pb.demo6; /* * 小狗类 */ public class Dog extends Pet { @Override void toHospital() { //小狗看病的方法 System.out.println("小狗看病:打针、吃药!"); } } package com.pb.demo6; /* * 小猪类 */ public class Pig extends Pet { @Override void toHospital() { System.out.println("小猪看病:打针、睡觉!"); } } package com.pb.demo6; /* * 小鸟类 */ public class Bird extends Pet { @Override void toHospital() { //小鸟看病的方法 System.out.println("小鸟看病:吃药、休息!"); } }
package com.pb.demo6; /* * 宠物医生类 */ public class Doctor { //医生治疗方法 public void cure(Pet pet){ //将宠物传参 if(pet.getHealth()<50){ //判断健康值小于50 //调用看病的方法 pet.toHospital(); //将健康值设置为60,健康 pet.setHealth(60); } } }
测试类
package com.pb.demo6; /* * 测试类 */ public class Test { public static void main(String[] args) { //声明医生对象 Doctor dc=new Doctor(); //声明宠物对象为小鸟 Pet brid=new Bird(); //调用医生的治疗方法 dc.cure(brid); //声明宠物对象为小狗 Pet dog=new Dog(); //调用医生的治疗方法 dc.cure(dog); //声明宠物对象为小猪 Pet pig=new Pig(); //调用医生的治疗方法 dc.cure(pig); } }
结果:
小鸟看病:吃药、休息! 小狗看病:打针、吃药! 小猪看病:打针、睡觉!
//声明宠物对象为小鸟 Pet brid=new Bird(); //声明宠物对象为小狗 Pet dog=new Dog(); //声明宠物对象为小猪 Pet pig=new Pig();
编译时类型为:Pet,而运行时类型为具体的类型
也就是说编译时类型由声明该变量时使用类型决定,而运行时类型由实际赋给该变量的对象决定
package com.pb.demo6; public abstract class Pet { private String name; //宠物名字 private String sex; //宠物性别 private int health; //宠物的健康值 //宠物看病的方法 abstract void toHospital(); public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getHealth() { return health; } public void setHealth(int health) { this.health = health; } }
package com.pb.demo6; /* * 小鸟类 */ public class Bird extends Pet { @Override void toHospital() { //小鸟看病的方法 System.out.println("小鸟看病:吃药、休息!"); } public void fly(){ System.out.println("小鸟会飞!"); } }
package com.pb.demo6; /* * 小狗类 */ public class Dog extends Pet { @Override void toHospital() { //小狗看病的方法 System.out.println("小狗看病:打针、吃药!"); } public void run(){ System.out.println("小狗在地上跑!"); } }
package com.pb.demo6; /* * 小猪类 */ public class Pig extends Pet { @Override void toHospital() { System.out.println("小猪看病:打针、睡觉!"); } public void sleep(){ System.out.println("小猪要睡觉!"); } }
package com.pb.demo6; /* * 宠物医生类 */ public class Doctor { //医生治疗方法 public void cure(Pet pet){ //将宠物传参 if(pet.getHealth()<50){ //判断健康值小于50 //调用看病的方法 pet.toHospital(); //将健康值设置为60,健康 pet.setHealth(60); //判断是宠物类型 if(pet instanceof Dog){ //向下转型,强制类型转制 Dog dog=(Dog)pet; //调用小狗自己的方法 dog.run(); }else if(pet instanceof Bird){ //向下转型,强制类型转制 Bird bird=(Bird)pet; //调用小鸟自己的方法 bird.fly(); }else if(pet instanceof Pig){ //向下转型,强制类型转制 Pig pig=(Pig)pet; //调用小猪自己的方法 pig.sleep(); } } } }
package com.pb.demo6; /* * 测试类 */ public class Test { public static void main(String[] args) { //声明医生对象 Doctor dc=new Doctor(); //声明宠物对象为小鸟 Pet brid=new Bird(); //调用医生的治疗方法 dc.cure(brid); //声明宠物对象为小狗 Pet dog=new Dog(); //调用医生的治疗方法 dc.cure(dog); //声明宠物对象为小猪 Pet pig=new Pig(); //调用医生的治疗方法 dc.cure(pig); } }
结果:
小鸟看病:吃药、休息! 小鸟会飞! 小狗看病:打针、吃药! 小狗在地上跑! 小猪看病:打针、睡觉! 小猪要睡觉!
package com.pb.demo2; /* * 商品类 */ public class Goods { //打印商品价格方法 public void printPrice(){ System.out.println("打印商品价格"); } } package com.pb.demo2; /* * 食品类 */ public class Foods extends Goods { @Override public void printPrice() { System.out.println("打印食品类的商品价格!"); } } package com.pb.demo2; /* * 电视类 */ public class TVs extends Goods { @Override public void printPrice() { System.out.println("打印电视类商品价格!"); } }
测试类:
package com.pb.demo2; public class Test { public static void main(String[] args) { //声明3 个商品价格 Goods good=new Goods(); Foods food=new Foods(); TVs tvs=new TVs(); //调用方法 showPrice(good); showPrice(food); showPrice(tvs); } //显示商品价格方法 static void showPrice(Goods good){ good.printPrice(); } }
结果:
打印商品价格
打印食品类的商品价格!
打印电视类商品价格!
原文:http://www.cnblogs.com/liunanjava/p/4295810.html