Java 无法从嵌套类访问方法

Java 无法从嵌套类访问方法,java,android,Java,Android,我有一个扩展类F的公共类a,类a有一个方法Aa。然后我有一个公共类B,其中有一个公共方法Bb。我有一个类a的对象k和一个实现接口E的类D。在类D中我不能访问k.Aa。为什么?好心帮忙 package com.example.sreeharsh.layoutcreate; import android.content.Context; import android.util.AttributeSet; import android.widget.ScrollView; public cla

我有一个扩展类F的公共类a,类a有一个方法Aa。然后我有一个公共类B,其中有一个公共方法Bb。我有一个类a的对象k和一个实现接口E的类D。在类D中我不能访问k.Aa。为什么?好心帮忙

package com.example.sreeharsh.layoutcreate;



import android.content.Context;
import android.util.AttributeSet;
import android.widget.ScrollView;

public class LDObservableScrollView extends ScrollView {





    private MainActivity.LDObservableScrollViewListener scrollViewListener = null;

    public LDObservableScrollView(Context context) {
        super(context);
    }

    public LDObservableScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public LDObservableScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void setScrollViewListener(MainActivity.LDObservableScrollViewListener scrollViewListener) {
        this.scrollViewListener = scrollViewListener;
    }







    @Override
    protected void onScrollChanged(int x, int y, int oldx, int oldy) {
        super.onScrollChanged(x, y, oldx, oldy);
        if(scrollViewListener != null) {
            scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
        }
    }

}





package com.example.sreeharsh.layoutcreate;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TableLayout;
import android.widget.TextView;



public class MainActivity extends ActionBarActivity {


    public interface LDObservableScrollViewListener {

        void onScrollChanged(LDObservableScrollView scrollView, int x, int y, int oldx, int oldy);

    }



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);





        final LDObservableScrollView scroll=new LDObservableScrollView(this);




        final LinearLayout layout =new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);
        layout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT));

        final LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        lparams.setMargins(0, 10, 0, 10);
        lparams.gravity=Gravity.CENTER;




        int i;

        for(i=0;i<5;i++) {

            ImageView imView = new ImageView(this);
            imView.setLayoutParams(lparams);

            Drawable new_image = getResources().getDrawable(R.drawable.rakthasakshi);
            imView.setBackgroundDrawable(new_image);

            layout.addView(imView, lparams);

        }
        scroll.addView(layout);
        setContentView(scroll);


        class DetectHere implements LDObservableScrollViewListener {


                scroll.setScrollViewListener(this);   //******* here cannot access the method setScrollViewListener .. 


            @Override



            public void onScrollChanged(LDObservableScrollView scrollView, int x,
                                        int y, int oldx, int oldy) {
                // TODO Auto-generated method stub
                if ((scrollView.getHeight() + y) >= layout.getHeight()) {


                    ImageView imView = new ImageView(MainActivity.this);
                    imView.setLayoutParams(lparams);

                    Drawable new_image = getResources().getDrawable(R.drawable.rakthasakshi);
                    imView.setBackgroundDrawable(new_image);

                    layout.addView(imView, lparams);



                }
            }
        }    


    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }





}
package com.example.sreeharsh.layoutcreate;
导入android.content.Context;
导入android.util.AttributeSet;
导入android.widget.ScrollView;
公共类LDObservableScrollView扩展了ScrollView{
private MainActivity.LDObservableScrollViewListener scrollViewListener=null;
公共LDObservableScrollView(上下文){
超级(上下文);
}
公共LDObservableScrollView(上下文上下文、属性集属性、int-defStyle){
超级(上下文、属性、定义样式);
}
公共LDObservableScrollView(上下文、属性集属性){
超级(上下文,attrs);
}
public void setScrollViewListener(MainActivity.LDObservableScrollViewListener scrollViewListener){
this.scrollViewListener=scrollViewListener;
}
@凌驾
CrollChanged上的受保护无效(整数x、整数y、整数oldx、整数oldy){
super.onScrollChanged(x,y,oldx,oldy);
if(scrollViewListener!=null){
onScrollChanged(this,x,y,oldx,oldy);
}
}
}
包com.example.sreeharsh.layoutcreate;
导入android.content.Context;
导入android.graphics.drawable.drawable;
导入android.support.v7.app.ActionBarActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.Gravity;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.MotionEvent;
导入android.view.view;
导入android.widget.AbsListView;
导入android.widget.ImageView;
导入android.widget.LinearLayout;
导入android.widget.ScrollView;
导入android.widget.TableLayout;
导入android.widget.TextView;
公共类MainActivity扩展了ActionBarActivity{
公共接口LDObservableScrollViewListener{
void onScrollChanged(LDObservableScrollView滚动视图,int x,int y,int oldx,int oldy);
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
最终LDObservableScrollView滚动=新的LDObservableScrollView(此);
最终线性布局=新线性布局(本);
布局。设置方向(线性布局。垂直);
layout.setLayoutParams(新的LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_父项,LinearLayout.LayoutParams.FILL_父项));
最终LinearLayout.LayoutParams lparams=新的LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_内容,LinearLayout.LayoutParams.WRAP_内容);
lparams.setMargins(0,10,0,10);
lparams.gravity=gravity.CENTER;
int i;
对于(i=0;i=layout.getHeight()){
ImageView imView=新的ImageView(MainActivity.this);
设置布局参数(lparams);
Drawable new_image=getResources().getDrawable(R.Drawable.rakthasakshi);
imView.setBackgroundDrawable(新图片);
layout.addView(imView、lparam);
}
}
}    
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(右菜单菜单菜单主菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
//noinspection SimplifiableIf语句
if(id==R.id.action\u设置){
返回true;
}
返回super.onOptionsItemSelected(项目);
}
}

当然,F类没有Aa方法。如果k是A的一个实例(但被放入具有多态性的类F),那么您可以这样强制转换:((F)k).Aa

您试图在类
F
对象上调用方法
A()
,而
A()
仅是
A
的方法。它仅在该类中定义,而不在
F
的基类中定义


您可以通过强制转换
((F)k).a()来调用它或者考虑将变量<代码> k <代码>作为类型<代码> a <代码>使用<代码> k=新A.();代码>

你能发布一些代码来演示这个问题吗?我已经给出了整个代码,你可以用实际的类名更新你的问题,这样我们就可以知道你在问什么了?你在内部类中的注释行不在方法中-在调用它之前将它放在方法中