1packagedemo1;23publicclassAnimal{4publicvoideat(){5System.out.println("动物吃东西");6}7}8910publicclassCatextendsAnimal{11@Override12publicvoideat(){13System.out.println("猫吃鱼");14}15}161718/**19*多态:20*同一个对象,在不同时刻表现出来的不同的形态21*举例:猫22*我们可以说猫是猫:猫cat=new猫();23*我们也可以说猫是动物:动物animal=new猫();24*这里猫在不同时刻表现出来了不同的形态,这就是多态25*多态的前提和体现26*有继承/实现关系27*有方法重写28*有父类引用指向子类对象29*@author单sir的电脑30*31*/32publicclassAnimalDemo{33publicstaticvoidmain(String[]args){34Animala=newCat();35a.eat();36}37}1.2多态中实例变量和实例方法的访问特点成员变量编译看左边,运行看左边成员方法编译看左边,运行看右边为什么成员变量和成员方法访问不一样呢?因为成员方法有重写,而成员变量没有代码体现demo2
1packagedemo2;23/**4*@author单sir的电脑5*测试类6*/7publicclassAnimalDemo{8publicstaticvoidmain(String[]args){9//有父类引用指向子类对象10Animala=newCat();11System.out.println(a.age);12//System.out.println(a.weight);//报错,为何?因为编译看左边,运行看左边13a.eat();14//a.playGame();//报错,为何?因为编译看左边,运行看右边15}16}1718publicclassAnimal{19publicintage=40;20publicvoideat(){21System.out.println("动物吃东西");22}23}2425publicclassCatextendsAnimal{26publicintage=20;27publicintweight=10;28@Override29publicvoideat(){30System.out.println("猫吃鱼");31}3233publicvoidplayGame(){34System.out.println("猫捉迷藏");35}36}
packagedemo4;publicclassAnimal{publicvoideat(){System.out.println("动物吃东西");}}publicclassCatextendsAnimal{@Overridepublicvoideat(){System.out.println("猫吃鱼");}publicvoidplayGame(){System.out.println("猫捉迷藏");}}/**向上转型从子到父父类引用指向子类对象向下转型从父到子父类引用转为子类对象**/publicclassAnimalDemo{publicstaticvoidmain(String[]args){//多态Animala=newCat();//由父类引用指向子类对象,向上转型a.eat();//创建Cat类的对象/*Catc=newCat();c.eat();c.playGame();*///向下转型,解决多态的弊端(不能调用子类特有的方法)Catc=(Cat)a;c.eat();c.playGame();}}
第一题
1packagecase5;2/*3*测试类4*/5publicclassTest{6publicstaticvoidmain(String[]args){7//以多态方式分别实例化子类对象并调用eat()方法8Animala=newDog();9a.eat();10a=newCat();11a.eat();12a=newLion();13a.eat();14}15}1617//动物类18publicclassAnimal{19publicvoideat(){20System.out.println("动物吃东西");21}22}23packagecase5;2425//Dog类继承Animal类复写eat()方法26publicclassDogextendsAnimal{27@Override28publicvoideat(){29System.out.println("eatingbread...");30}31}3233/*34*Cat类继承Animal类复写eat()方法35*/36publicclassCatextendsAnimal{37@Override38publicvoideat(){39System.out.println("eatingrat...");40}41}4243//Lion类继承Animal类复写eat()方法44publicclassLionextendsAnimal{45@Override46publicvoideat(){47System.out.println("eatingmeat...");48}49}