标题:为什么找不到符号????
只看楼主
新人学习
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:145
专家分:187
注 册:2017-10-26
结帖率:66.67%
已结贴  问题点数:20 回复次数:3 
为什么找不到符号????
interface AA
{
    //接口
    void f();
}

class BB                     
{
    public void f() {System.out.println("BB");}
    public class BC implements AA
    {
        public void f() {System.out.println("BC");}
        public class BD implements AA
        {
            public void f() {System.out.println("BD");}
        }
        public AA Newn()
        {
            return new BD();
        }
    }
    public AA New() //BC 没有对象 就无法创建BD对象 因为他们都是非静态class 必须要有外部类对象才能创建内部类对象
    {
        return new BC();
    }
}

class CC
{
    public void f() {System.out.println("CC");}
    private static class CA implements AA
    {
        public void f() {System.out.println("CA");}
        private static class CB implements AA
        {
            public void f() {System.out.println("CB");}
        }
    }
    public static AA New(int i)
    {
        if (i == 1 && i != 2)
            return new CA();
        else
            return new CA.CB();
    }
}
public class lianxi19
{
    public static void play(BB a)
    {
        AA a1 = a.New();
        AA a2 = a1.Newn();
        AA a3 = CC.New(1);
        AA a4 = CC.New(2);
    }
   
    public static void main(String[] args)
    {
        play(new BB());
    }
}
/*
lianxi19.java:54: 错误: 找不到符号
                AA a2 = a1.Newn();
                          ^
  符号:   方法 Newn()
  位置: 类型为AA的变量 a1
1 个错误

D:\wendang\linshijava\Nine\ten>
*/
搜索更多相关主题的帖子: void class public out new 
2018-10-30 21:29
纵横阳仔
Rank: 7Rank: 7Rank: 7
来 自:自学成才的火星人儿
等 级:贵宾
威 望:26
帖 子:147
专家分:698
注 册:2016-10-20
得分:10 
这里是涉及到成员内部类和静态内部类的问题;

成员内部类创建实例时,需要先创建外部类的实例(该实例与外部实例息息相关,只能被外部实例使用)
静态内部类创建实例时,不需要创建外部类的实例,只需表名该实例属于哪一种类即可(该实例与外部类型息息相关;所有的外部类的实例都可以使用该实例)

AA a2 = a1.Newn();
这句话在编译的时候会出错;因为编译看左边;变量a1是 AA 类型(由AA a1 = a.New();决定),AA没有newn()这个方法;
要想使用则应将其转化为对应的类型;
AA a2 = ((BB.BC)a1).Newn();
2018-10-31 11:28
TysonKoothra
Rank: 5Rank: 5
等 级:职业侠客
威 望:7
帖 子:71
专家分:374
注 册:2018-10-21
得分:10 
Newn方法也可以写在BB里面。
程序代码:
public AA Newn(){
    return (new BC()).new BD();
}

play里面写AA a2=a.Newn();

[此贴子已经被作者于2018-10-31 15:11编辑过]

2018-10-31 15:08
新人学习
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:145
专家分:187
注 册:2017-10-26
得分:0 
回复 2楼 纵横阳仔
是啊 需要向下转型
我今天刚弄明白.

谢谢你.
2018-10-31 22:56



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-490834-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.225679 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved