现有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;
/**
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;
/**
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;
/**
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();