标签:instr 继承 产生 main 是什么 ring 提高 高手 color
宠物的父类: // 所有宠物的父类 public class Pet{ // 吃的行为(这个方法可以不给具体的实现) public void eat(){ } }
子类猫类: // 创建猫类 public class Cat extends Pet{ // 吃的实例方法 public void eat(){ System.out.println("猫咪喜欢吃鱼,吃的很香!"); } }
子类狗类: // 宠物狗狗类 public class Dog extends Pet{ // 吃 public void eat(){ System.out.println("狗狗喜欢啃骨头,吃的很香。"); } }
子类鹦鹉类: // OCP : 对扩展开发,对修改关闭 public class YingWu extends Pet{ public void eat(){ System.out.println("鹦鹉再吃鹦鹉屎,吃的很香!"); } }
主人类: // 主人类 public class Master{ // 假设主任起初的时候只是喜欢养宠物狗狗 // 喂养宠物狗狗 实例方法 /* public void feed(Dog d){ d.eat(); } // 由于新的需求产生,导致我们“不得不”去修改Master这个类的代码 public void feed(Cat c){ c.eat(); } */ // 能不能让Master主人这个类以后不再修改了 // 即使主人又喜欢养其他动物了,Master也不需要改。 // 这个时候就需要使用:多态机制。 // 最好不要写具体的宠物类型,这样会影响程序的扩展性。 public void feed(Pet pet){ // 编译的时候,编译器发现pet是Pet类,会去找Pet类中找eat()方法,结果找到了,编译通过。 // 运行的时候,底层实际的对象是什么,就自动调用到该实际对象对应的eat()方法上。 // 这就是多态的使用。 pet.eat(); } }
测试类: /* 测试多态在开发中的作用 */ public class Test{ public static void main(String[] args){ // 创建主人对象 Master zhangsan = new Master(); // 创建狗狗对象 Dog zangAo = new Dog(); // 主人喂 zhangsan.feed(zangAo); // 创建宠物对象 // 主人喂 Cat jinJianCeng = new Cat(); zhangsan.feed(jinJianCeng); YingWu yw = new YingWu(); zhangsan.feed(yw); } }
案例2:
乐器类 父类: // 定义乐器类 父类 public class Instrument{ // 父类中的实例方法 public void makeSound(){} }
子类 二胡类: // 子类 乐器二胡 继承父类乐器类 public class Erhu extends Instrument{ // 重写父类中的乐器方法 public void makeSound(){ System.out.println("一曲肝肠断,天涯何处觅知音。"); } }
子类 钢琴类: // 子类钢琴 继承父类乐器类 public class Piano extends Instrument{ // 重写父类中的乐器方法 public void makeSound(){ System.out.println("他的手指像蝴蝶一样在钢琴上偏偏起舞!"); } }
子类小提琴类: // 子类小提琴 继承父类乐器类 public class Violin extends Instrument{ // 重写父类中的方法 public void makeSound(){ System.out.println("他站着,拉着他手中的小提琴,真是一幅优美的画面。"); } }
乐手类: public class Musician{ public void play(Instrument i){ i.makeSound(); } // 第一种写法 /* // 创建一个实例变量 Instrument i; // 构造方法 public Musician(){} public Musician(Instrument i){ this.i = i; } // 创建演奏乐器的方法 public void play(){ i.makeSound(); }*/ }
测试类: // 测试类 public class Test02{ public static void main(String[] args){ // 第一种写法 // 创建乐手对象 /* Musician lZ = new Musician(new Erhu()); lZ.play(); */ //第二种写法 Musician lZ = new Musician(); /* // 创建二胡对象 Erhu e = new Erhu(); // 创建小提琴对象 Violin v = new Violin(); // 创建钢琴对象 Piano p = new Piano(); */ /* // 创建二胡对象 Instrument e = new Erhu(); // 创建小提琴对象 Instrument v = new Violin(); // 创建钢琴对象 Instrument p = new Piano(); // 让乐手去拉二胡 你需要让乐手演奏什么,就把什么对象传给演奏者进行呀演奏。 lZ.play(e); // 让乐手去拉小提琴 lZ.play(v); // 让乐手去弹钢琴 lZ.play(p); */ lZ.play(new Erhu()); // 让乐手去拉小提琴 lZ.play(new Violin()); // 让乐手去弹钢琴 lZ.play(new Piano()); } }
标签:instr 继承 产生 main 是什么 ring 提高 高手 color
原文地址:https://www.cnblogs.com/xlwu/p/13069203.html