问题描述
publicclassDemo4{/***@paramargs*/publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstub//Catcat1=newCat();//cat1.cry();//Dogdog1=newDog();//dog1.cry();Animala=newCat();a.cry();为什么这句编译不过去呢?多态是这样用的吗?}}classAnimal{intage;Stringname;publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicvoidcry(){System.out.println("不知道谁叫:");}classCatextendsAnimal{publicvoidcry(){System.out.println("猫猫叫声");}}classDogextendsAnimal{publicvoidcry(){System.out.println("狗狗叫声");}}}
解决方案
解决方案二:
Cat、Dog是Animal类的内部类?
解决方案三:
在Demo4类中,添加:Animala=newAnimal();a.getCat().cry();
在Animal类中,添加:publicCatgetCat(){returnnewCat();}
解决方案四:
Animala=newCat();a.cry();为什么这句编译不过去呢?多态是这样用的吗?}Cata=newCat();//构造一个Gat,里面有父类的属性和方法。
解决方案五:
publicclassDemo4{publicstaticvoidmain(String[]args){Animala=newDemo4().newCat();a.cry();}classAnimal{intage;Stringname;publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicvoidcry(){System.out.println("不知道谁叫:");}}classCatextendsAnimal{publicCat(){}publicvoidcry(){System.out.println("猫猫叫声");}}classDogextendsAnimal{publicvoidcry(){System.out.println("狗狗叫声");}}}
关键是这里:newDemo4().newCat();创建内部类的对象时需提供一个外部类的对象作为构造方法的参数,因为非静态内部类的作用域属于外部类的某个对象;如果使用静态内部类,就无需如此了。
解决方案六:
原来如此。。