你设置一个接口 里面的方法传出参数为类A, 现在你需要传出一个A的子类(如B)。有办法可以实现吗?

dao1595711 2016-09-05 07:12:58
你设置一个接口 里面的方法传出参数为类A, 现在你需要传出一个A的子类(如B)。有办法可以实现吗?


class A{
private int a = 1;
}

interface base{
public A test();
}


class B extends A{
private int b = 1;
}
...全文
709 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
白中 2018-08-07
  • 打赏
  • 举报
回复
B b = new base() {

@Override
public B test() {

return new B();
}

}.test();
这样不知道是不是楼主想要的
i_xiangwei 2018-07-09
  • 打赏
  • 举报
回复
void demo(Class<? extends B> param){}
tdy_nju 2016-09-07
  • 打赏
  • 举报
回复
强制转换成父类不行吗……
NewMoons 2016-09-06
  • 打赏
  • 举报
回复
引用 7 楼 yiyuanbo 的回复:
现在是接口内定义了方法传出来类A,现在想要多传出参数,但是类A不能修改。只能用类B去继承类A,在B中加入其它参数。 但是多态的话,类B新加的参数就不会有了。现在有什么办法吗
有能听懂楼主这段话描述意思的人么?我在4楼的代码如果不是这个意思,俺是真听不懂了。
dao1595711 2016-09-06
  • 打赏
  • 举报
回复
现在是接口内定义了方法传出来类A,现在想要多传出参数,但是类A不能修改。只能用类B去继承类A,在B中加入其它参数。 但是多态的话,类B新加的参数就不会有了。现在有什么办法吗
hlfan2 2016-09-06
  • 打赏
  • 举报
回复
引用 5 楼 sean_0xiao 的回复:
就用一个多态就能解决问题了!如果B继承于A,则可以A a = new B();的方式来创建B
正解
傻傻de点点 2016-09-06
  • 打赏
  • 举报
回复
引用 8 楼 NewMoons 的回复:
[quote=引用 7 楼 yiyuanbo 的回复:] 现在是接口内定义了方法传出来类A,现在想要多传出参数,但是类A不能修改。只能用类B去继承类A,在B中加入其它参数。 但是多态的话,类B新加的参数就不会有了。现在有什么办法吗
有能听懂楼主这段话描述意思的人么?我在4楼的代码如果不是这个意思,俺是真听不懂了。[/quote] 楼主的意思是,有一个类A,A有一个成员变量,能通过一个接口传出这个成员变量。现在想要扩展类A,让A能多一个成员变量,但是A不能修改,所以想用另一个类B去继承A,在B里增加成员变量,再通过接口传出去。 反正对于这种需求,我想说的只有一句话,MDZZ。
sean_0xiao 2016-09-05
  • 打赏
  • 举报
回复
就用一个多态就能解决问题了!如果B继承于A,则可以A a = new B();的方式来创建B
NewMoons 2016-09-05
  • 打赏
  • 举报
回复
不明白想证明什么,不就是多态加强制转换实现吗:
class A {
	public int a = 1;
}

class B extends A {
	public int b = 2;
}

interface base{
	public A test();
}

public class Test2 implements base{
	@Override
	public A test() {
		return new B();
	}
	
	public static void main(String[] args) {
		base base = new Test2();
		B b = (B)base.test();
		System.out.println(b.b);
	}
}
dao1595711 2016-09-05
  • 打赏
  • 举报
回复
public class Test2 { public static void main(String[] args) { base test = new impl(); A A = test.test(); // System.out.println(A.b); System.out.println(A.a); } } interface base{ public A test(); } class A{ public int a = 1; } class B extends A{ public int b = 3; } class impl implements base{ public B test(){ B b = new B(); b.b = 10; b.a = 4; return b; } }
dao1595711 2016-09-05
  • 打赏
  • 举报
回复
这样重写 并不能通过接口可以得到重写后的方法呀
  • 打赏
  • 举报
回复
实现base接口,重写test方法,在子类的test方法中返回B类型的对象是可以的

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧