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 星