多态表示不同的对象执行相同的动作,但要通过它们自己的实现代码来执行。上面的例子中,猫类和狗类执行相同的动作–叫声,但通过自己的实现代码来执行–猫叫声和狗叫声。
根据 Lady 对象的成员变量 pet 所引用的不同的实际类型而调用响应的 enjoy 方法。多态的三个必要条件:要有继承;要有重写;父类引用指向子类对象。多态
- class Animal {
- private String name;
- Animal(String name) {
- this.name = name;
- }
- public void enjoy() {
- System.out.println("叫声......");
- }
- }
- class Cat extends Animal {
- private String eyesColor;
- Cat(String n, String c) {
- super(n);
- eyesColor = c;
- }
- public void enjoy() {
- System.out.println("猫叫声......");
- }
- }
- class Dog extends Animal {
- private String furColor;
- Dog(String n, String c) {
- super(n);
- furColor = c;
- }
- public void enjoy() {
- System.out.println("狗叫声......");
- }
- }
- class Lady {
- private String name;
- private Animal pet;
- Lady(String name, Animal pet) {
- this.name = name;
- this.pet = pet;
- }
- public void myPetEnjoy() {
- pet.enjoy();
- }
- }
- public class TestPolymoph {
- public static void main(String args[]) {
- Cat c = new Cat("catname", "blue");
- Dog d = new Dog("dogname", "black");
- Lady L1 = new Lady("L1", c);
- Lady L2 = new Lady("L2", d);
- L1.myPetEnjoy();
- L2.myPetEnjoy();
- }
- }
抽象
就像 "动物" 是一个抽象的名词,根本没有具体的对象与之对应,实例化没有任何意义,像这样的情况,我们可以把它改为抽象类,即在 class 之前加 abstract 关键字。用 abstract 来修饰方法时,它就是抽象方法。使用的时候,我们可以考虑让抽象类拥有尽可能多的共同代码,拥有尽可能少的数据。
注意:1、抽象方法一定是用来被实现的。2、抽象类必须被继承。3、抽象方法必须被重写。4、抽象类不能被实例化。5、抽象方法只声明不实现。
- abstract class Animal { //抽象类 private String name; Animal(String name) {this.name = name;} public abstract void enjoy(); //抽象方法,只需声明不需实现}class Dog extends Animal { private String furColor; Dog(String n,String c) {super(n); furColor = c;} public void enjoy() { //抽象方法的实现 System.out.println("狗叫声......"); }}class Bird extends Animal { //抽象类的继承 Bird() { super("bird"); //调用基类的构造方法 } public void enjoy() { System.out.println("鸟叫声......"); }}class Lady { private String name; private Animal pet; Lady(String name,Animal pet) { this.name = name; this.pet = pet; } public void myPetEnjoy(){pet.enjoy();}}public class TestPolymoph { public static void main(String args[]){ Dog d = new Dog("dogname","black"); Bird b = new Bird(); Lady L1 = new Lady("L1",d); Lady L2 = new Lady("L2",b); L1.myPetEnjoy(); L2.myPetEnjoy(); }}
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: http://www.92to.com/bangong/2017/02-21/17358746.html