多态的好处和instanceof关键字
多态的好处
class Animal{ public void show(){ System.out.println("。。。"); } } class Panda extends Animal{ @Override public void show() { System.out.println("熊猫"); } } class Dog extends Animal{ @Override public void show() { System.out.println("狗"); } } class Food{ public void show(){ System.out.println("。。。"); } } class Bamboo extends Food{ @Override public void show() { System.out.println("竹子"); } } class meat extends Food{ @Override public void show() { System.out.println("肉"); } }
class Feed{ public void feeder(Animal a,Food f){ a.show(); f.show(); } }
public static void main(String[] args) { Animal a = new Panda(); Food f = new Bamboo(); Animal a1 = new Dog(); Food f1 = new meat(); Feed feed = new Feed(); feed.feeder(a,f); feed.feeder(a1,f1); }
我们通过创建动物类和事物类,创建这两个类的子类继承父类并重写父类方法,再创建展示类,用来接收传递的动物类对象以及事物类对象,
只要在创建对象时使用父类引用子类对象的方式创建,并将创建的对象传递给展示类中的方法,就可以想要创建哪个类都可以
多态的好处:
1、简化代码
2、提高了可扩展性
3、提高了程序的可维护性
instanceof关键字
多态中的类型转换
向上转型(自动转换)
格式:<父类型><引用变量名>= new<子类型>();
特点:
子类转为父类父类的引用指向子类对象。
自动进行类型转换此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法此时通过父类引用变是无法调用子类特有的属性和方法
向下转型(强制转换)
格式:<子类型><引用变量名>=(<子类型>)<父类型的引用变量>;
特点:
父类转为子类,父类引用转为子类对象。
强制类型转换 在向下转型的过程中,如果没有转换为真实子类类型,会出现类型转换异常
如果没有转换为真实子类类型,会出现类型转换异常
class Person{ public void eat(){ System.out.println("。。。"); } } class Stundet extends Person{ @Override public void eat() { System.out.println("学生类吃"); } public void study(){ System.out.println("学习"); } } class Doc extends Person{ @Override public void eat() { System.out.println("子类吃"); } }
public static void main(String[] args) { Person p = new Stundet(); p.eat(); Stundet s = (Stundet) p; s.study(); Doc d = (Doc)p; }
类型转换错误:

instanceof关键字用来测试它左边的是否是右边的类的实例,返回值为boolean类型
public static void main(String[] args) { Person p = new Stundet(); p.eat(); if (p instanceof Stundet){ Stundet s = (Stundet) p; s.study(); }else if (p instanceof Doc){ Doc d = (Doc)p; } }
运行结果:


浙公网安备 33010602011771号