多态性小例子以及多态性在重写(覆盖)下的体现

it2022-05-08  8

对于初学者来说 java多态性的上转下转特别容易搞不清楚

下面我带来一个简单的例子说明一下

希望对你有所帮助

首先一个父类 封装一个属性:name

并有一个方法say  ,参数是 Ainmal类型

public class Animal { private String name; public void say(Animal animal){ System.out.println("汤姆与杰瑞"); } public String getName() { return name; } public void setName(String name) { this.name = name; } }

然后我们建两个不同的动物类,都继承Animal

并且都重写say方法

这里注意重写和重载的区别:想要了解请去我博客看上一篇

猫类,自己新建一个属性:gender性别,用于下转

public class Cats extends Animal{ private String gender; public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public Cats(){} public Cats(String name,String gender){ this.setName(name); this.gender = gender; } @Override public void say(Animal animal){ //下转 Mouse mouse = (Mouse) animal; System.out.println(getName()+"("+gender+")天天捉不到("+mouse.getGender()+")"+animal.getName()); } }

老鼠类,自己新建一个属性:gender性别,用于下转

public class Mouse extends Animal{ private String gender ; public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public Mouse(String name,String gender){ this.setName(name); this.gender = gender; } @Override public void say(Animal animal){ //下转 Cats cat = (Cats) animal; System.out.println(getName()+"("+gender+")永远不会被"+animal.getName()+"("+cat.getGender()+")捉到"); } }

测试类

public class TestAnimal { public Object method(){ return new Cats(); } public Animal getAnimal(){ /* return new Cats("tom");*/ return new Mouse("杰瑞","男"); } public static void main(String []args){ Animal cat = new Cats("汤姆","男"); Animal mouse = new Mouse("杰瑞","女"); //上转 cat.say(mouse); mouse.say(cat); } }

结果:

汤姆(男)天天捉不到(女)杰瑞 杰瑞(女)永远不会被汤姆(男)捉到

 

下面通过    简单表示一下它们特性

class A{ } class B extends A{ } class C extends B{ } /** * 测试转型 特性 * @author *** * @version 1.0.0 * @createTime 2019-07-24 16:38:36 */ public class Trans { public static void main(String []args){ A a = new A(); B b = new B(); C c = new C(); /* a = b; b = c; a = c; */ A a1 = c;//c上转形成A类 通过了B类 B b1 = (B) a1;//再将A类下转为B类 /* //下转一点要先上转在下 A a2 = b; C c1 = (C) a2;//运行时错误 */ System.out.println("!!!!!!"); } }

关键字  instanceOf :判断对象是否属于一个类的实例

我们在Trans下新建一个方法 method();如下

public void method(Animal animal){ if (animal instanceof Cats){ //下转 Cats cat = (Cats) animal; cat.printMsg();//printMsg()方法在父类中并没有 }else if (animal instanceof Mouse){ //下转 Mouse mouse = (Mouse) animal; mouse.show(); } }

main()函数中测试

Animal cat = new Cats("Tom","boy");

Animal mouse = new Mouse("Jerry","girl");

trans.method(cat);

trans.method(mouse);

我们简单分析一下:

    其中我用父类分别创建了两个子类对象,这里运用下转体现了运行时多态

在method方法体中应用下转

 

结果:

猫Tomboy 鼠Jerrygirl


最新回复(0)