BallTest类中的成员内部类的获取方法的返回值改成Object为什么会报错?
Test.java //测试类 public class Test { public static void main(String[] args) { //完成成员内部类内部测试 BallTest one = new BallTest(); //获取内部类对象实例,方式一:new 外部类.new 内部类 System.out.println("成员内部类的方法一调用"); BallTest.Inner_m one1 = new BallTest().new Inner_m(); one1.play(); //获取内部类对象实例,方式二:外部类对象.new 内部类 System.out.println("成员内部内的方法二调用"); one.new Inner_m().play(); //获取内部类对象实例,方式三:外部类对象.获取方法 System.out.println("成员内部内的方法三调用"); one.getInner_m().play(); // System.out.println( one.getInner_m() instanceof Object); //完成方法内部类测试 // BallTest two = new BallTest(); one.info(); //完成匿名内部类测试 BallTest two = new BallTest(); two.playBall(new Ball(){ public void play(){ System.out.println("**************************"); System.out.println("匿名内部类:"); System.out.println("打排球"); } }); } } BallTest.java //创建类BallTest public class BallTest implements Ball { // 创建成员内部类Inner_m class Inner_m{ public void play(){ System.out.println("成员内部类:"); System.out.println("打篮球"); } } public Object getInner_m(){ return new Inner_m(); } // 创建方法内部类 public void info(){ class Inner_f{ public void play(){ System.out.println("****************"); System.out.println("方法内部类"); System.out.println("打乒乓球"); } } new Inner_f().play(); } // 定义一个方法void playBall(Ball ball),调用play()方法 public void playBall(Ball ball){ ball.play(); } public void play(){ } } Ball.java //接口Ball public interface Ball { //创建抽象方法play():void void play(); }
报错提示为
运行失败
Test.java:16: error: cannot find symbol
one.getInner_m().play();
^
symbol: method play()
location: class Object
1 error
如果将BallTest类中的getInner_m方法的返回值修饰符写成Inner_m就能成功运行,为什么Object会报错?
正在回答 回答被采纳积分+1
前面的代码在inport了Inner_m类后已成功,但还有一个小问题
//创建类BallTest public class BallTest implements Ball { // 创建成员内部类Inner_m class Inner_m implements Ball{ public void play(){ System.out.println("成员内部类:"); System.out.println("打篮球"); } } public Object getInner_m(){ return new Inner_m(); }
在下面的getInner_m()方法中,我是new Inner_m()对象,那么我觉得他应该是创建了上面的成员内部类Inner_m的类对象,Object作为返回值修饰符只要返回值是Object的子类即可,但是根据前面的实验,他的new Inner_m()直接就是Object类对象了,这是为什么?在同一个类中明明有同名的Inner_m类啊,他没有去调用同类的内部类创建对象,而是直接创建了一个跟返回值修饰符类型同类的对象?即使这个new的对象名与我的成员内部类名完全相同也不会去调用成员内部类?
//测试类 public class Test { public static void main(String[] args) { //完成成员内部类内部测试 BallTest one = new BallTest(); //获取内部类对象实例,方式一:new 外部类.new 内部类 System.out.println("成员内部类的方法一调用"); BallTest.Inner_m one1 = new BallTest().new Inner_m(); one1.play(); //获取内部类对象实例,方式二:外部类对象.new 内部类 System.out.println("成员内部内的方法二调用"); one.new Inner_m().play(); //获取内部类对象实例,方式三:外部类对象.获取方法 System.out.println("成员内部内的方法三调用"); Inner_m i = (Inner_m)one.getInner_m(); i.play(); // one.getInner_m().play(); // System.out.println( one.getInner_m() instanceof Object); //完成方法内部类测试 // BallTest two = new BallTest(); one.info(); //完成匿名内部类测试 BallTest two = new BallTest(); two.playBall(new Ball(){ public void play(){ System.out.println("**************************"); System.out.println("匿名内部类:"); System.out.println("打排球"); } }); } } //创建类BallTest public class BallTest implements Ball { // 创建成员内部类Inner_m class Inner_m implements Ball{ public void play(){ System.out.println("成员内部类:"); System.out.println("打篮球"); } } public Object getInner_m(){ return new Inner_m(); } // 创建方法内部类 public void info(){ class Inner_f implements Ball{ public void play(){ System.out.println("****************"); System.out.println("方法内部类"); System.out.println("打乒乓球"); } } new Inner_f().play(); } // 定义一个方法void playBall(Ball ball),调用play()方法 public void playBall(Ball ball){ ball.play(); } public void play(){ } } //接口Ball public interface Ball { //创建抽象方法play():void void play(); }
目前已经根据前一个老师说的所有内部类也都实现了接口,实例化时添加了强制类型转换
但是目前
public Object getInner_m(){ return new Inner_m(); }
这个返回值修饰符如果不使用Inner_m而是使用Object还是没有办法解决Test方法中调用的问题,即使按照前面一个老师说的强制类型转换也会报错
Inner_m i = (Inner_m)one.getInner_m(); i.play();
报错信息为
Test.java:16: error: cannot find symbol
Inner_m i = (Inner_m)one.getInner_m();
^
symbol: class Inner_m
location: class Test
Test.java:16: error: cannot find symbol
Inner_m i = (Inner_m)one.getInner_m();
^
symbol: class Inner_m
location: class Test
2 errors
题目说错了,是返回值修饰符
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星