请问Java中两个类实现同一个接口的问题

现有Class A,Class B,interface C
C中有一个f()的空方法,A中有对这个f()的具体实现

请问B能不能直接调用A中实现好了的f()方法?如果不能,该怎么办才可以调用?

A和B仅仅只是实现了同一个接口,并没有继承关系,所以AB两个类并没有实际的关系,所以一楼的回答,B b = new A();是不能通过编译器检查的
,只有A是B的子类或者中间隔有多重继承关系,才可以这样写,即子类对象拥有父类类型。在B中不可以直接调用A的f()方法,想要调用的话,就在B中
创建一个A的实例,然后用这个实例来调用。

WelcomeActivity

package com.zcy.ghost.vivideo.ui.activitys;

import android.os.Bundle;

import com.zcy.ghost.vivideo.R;
import com.zcy.ghost.vivideo.base.BaseActivity;
import com.zcy.ghost.vivideo.presenter.WelcomePresenter;
import com.zcy.ghost.vivideo.ui.view.WelcomeView;

import butterknife.BindView;
import butterknife.ButterKnife;

public class WelcomeActivity extends BaseActivity {

@BindView(R.id.welcome_view)
WelcomeView welcomeView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_welcome);
    unbinder = ButterKnife.bind(this);
    mPresenter = new WelcomePresenter(welcomeView);
}

}

WelcomeView

package com.zcy.ghost.vivideo.ui.view;

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

import com.google.common.base.Preconditions;
import com.zcy.ghost.vivideo.R;
import com.zcy.ghost.vivideo.base.RootView;
import com.zcy.ghost.vivideo.component.ImageLoader;
import com.zcy.ghost.vivideo.presenter.contract.WelcomeContract;
import com.zcy.ghost.vivideo.ui.activitys.WelcomeActivity;
import com.zcy.ghost.vivideo.utils.EventUtil;
import com.zcy.ghost.vivideo.utils.JumpUtil;
import com.zcy.ghost.vivideo.utils.StringUtils;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;

/**

  • Description: WelcomeView
  • Creator: yxc
  • date: 2016/9/22 13:20
    */
    public class WelcomeView extends RootView implements WelcomeContract.View {

    private WelcomeContract.Presenter mPresenter;

    @BindView(R.id.iv_welcome_bg)
    ImageView ivWelcomeBg;

    public WelcomeView(Context context) {
    super(context);
    init();
    }

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

    private void init() {
    mContext = getContext();
    inflate(mContext, R.layout.activity_welcome_view, this);
    unbinder = ButterKnife.bind(this);
    mActive = true;
    }

    @Override
    public void setPresenter(WelcomeContract.Presenter presenter) {
    mPresenter = Preconditions.checkNotNull(presenter);
    }

    @Override
    public void showError(String msg) {
    EventUtil.showToast(mContext, msg);
    }

    @Override
    public boolean isActive() {
    return mActive;
    }

    @Override
    public void showContent(List list) {
    if (list != null) {
    int page = StringUtils.getRandomNumber(0, list.size() - 1);
    ImageLoader.load(mContext, list.get(page), ivWelcomeBg);
    ivWelcomeBg.animate().scaleX(1.12f).scaleY(1.12f).setDuration(2000).setStartDelay(100).start();
    }

    }

    @Override
    public void jumpToMain() {
    JumpUtil.go2MainActivity(mContext);
    ((WelcomeActivity) mContext).overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
    }
    }

WelcomePresenter

package com.zcy.ghost.vivideo.ui.view;

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

import com.google.common.base.Preconditions;
import com.zcy.ghost.vivideo.R;
import com.zcy.ghost.vivideo.base.RootView;
import com.zcy.ghost.vivideo.component.ImageLoader;
import com.zcy.ghost.vivideo.presenter.contract.WelcomeContract;
import com.zcy.ghost.vivideo.ui.activitys.WelcomeActivity;
import com.zcy.ghost.vivideo.utils.EventUtil;
import com.zcy.ghost.vivideo.utils.JumpUtil;
import com.zcy.ghost.vivideo.utils.StringUtils;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;

/**

  • Description: WelcomeView
  • Creator: yxc
  • date: 2016/9/22 13:20
    */
    public class WelcomeView extends RootView implements WelcomeContract.View {

    private WelcomeContract.Presenter mPresenter;

    @BindView(R.id.iv_welcome_bg)
    ImageView ivWelcomeBg;

    public WelcomeView(Context context) {
    super(context);
    init();
    }

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

    private void init() {
    mContext = getContext();
    inflate(mContext, R.layout.activity_welcome_view, this);
    unbinder = ButterKnife.bind(this);
    mActive = true;
    }

    @Override
    public void setPresenter(WelcomeContract.Presenter presenter) {
    mPresenter = Preconditions.checkNotNull(presenter);
    }

    @Override
    public void showError(String msg) {
    EventUtil.showToast(mContext, msg);
    }

    @Override
    public boolean isActive() {
    return mActive;
    }

    @Override
    public void showContent(List list) {
    if (list != null) {
    int page = StringUtils.getRandomNumber(0, list.size() - 1);
    ImageLoader.load(mContext, list.get(page), ivWelcomeBg);
    ivWelcomeBg.animate().scaleX(1.12f).scaleY(1.12f).setDuration(2000).setStartDelay(100).start();
    }

    }

    @Override
    public void jumpToMain() {
    JumpUtil.go2MainActivity(mContext);
    ((WelcomeActivity) mContext).overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
    }
    }

WelcomeContract

package com.zcy.ghost.vivideo.presenter.contract;

import com.zcy.ghost.vivideo.base.BasePresenter;
import com.zcy.ghost.vivideo.base.BaseView;

import java.util.List;

/**

  • Description: WelcomeContract
  • Creator: yxc
  • date: 2016/9/22 13:16
    */
    public interface WelcomeContract {

    interface View extends BaseView {

    boolean isActive();
    
    void showContent(List<String> list);
    
    void jumpToMain();
    

    }

    interface Presenter extends BasePresenter {
    void getWelcomeData();
    }
    }

其中在WelcomePresenter里面有一个showcontent的方法,实现的接口里面的showcontent的方法是空方法,在WelcomeView里面的shoucontent方法是有内容可以使用的,对于这个地方的逻辑不太明白,请指教,谢谢!

Class A继承Class B就行了

B类继承A 就可以调用了

一:Class B 直接在继承Class A
二:在ClassB中实现f()方法,内容是
A a=new A();
a.f();

A,B实现了同一个接口C,A对方法f实现了,可以看做是一个目标类,B你可以看做是一个代理类,这样就是一个静态代理了,你可以直接调用接口的方法
Cc-new C();c.f()即可,当然你也可以在调用f前后分别做些操作都可以。

B b=new A();
b.f();