在java的接口中,只有抽象方法和常量,我想问:
当一个类去实现该接口,该继承类又希望有自己
的属性时,那么该继承类需要定义并实现自己的一个
方法才能访问该属性,但是这样好像与接口又没有关系了,
并且该类生成的对象也不能调用子类中的该方法,
请看:
interface Inter1
{
public void dspStr(String str);
}class CInter1 implements Inter1
{
private int num;
public CInter1(int num)
{
this.num=num;
}
public void dspStr(String str)
{
System.out.print(str);
}
public void dsoInt()
{
System.out.print(this.num);
}
}public class Test8 { public static void main(String[] args) {
// TODO 自动生成的方法存根
Inter1 obj=new CInter1(123);
obj.dsoInt(); //这个是错误的,只能用 CInter1 obj=new CInter1(123);但是这样又失去多态的特性
obj.dspStr("hello");
}}
请问:遇到这种继承类希望有自己属性的时候,该怎么办?
有什么比较好的设计模式呢?
当一个类去实现该接口,该继承类又希望有自己
的属性时,那么该继承类需要定义并实现自己的一个
方法才能访问该属性,但是这样好像与接口又没有关系了,
并且该类生成的对象也不能调用子类中的该方法,
请看:
interface Inter1
{
public void dspStr(String str);
}class CInter1 implements Inter1
{
private int num;
public CInter1(int num)
{
this.num=num;
}
public void dspStr(String str)
{
System.out.print(str);
}
public void dsoInt()
{
System.out.print(this.num);
}
}public class Test8 { public static void main(String[] args) {
// TODO 自动生成的方法存根
Inter1 obj=new CInter1(123);
obj.dsoInt(); //这个是错误的,只能用 CInter1 obj=new CInter1(123);但是这样又失去多态的特性
obj.dspStr("hello");
}}
请问:遇到这种继承类希望有自己属性的时候,该怎么办?
有什么比较好的设计模式呢?
CInter1是实现了 interface Inter1 这个接口接口的多态是为了可以通过接口类 new 实现接口的对象 来显示,不同实现对象对接口内方法的不同实现
如果要调用实现接口类 中自己定义的方法,可以把 new 出的对象强制类型转换
interface Inter1 {
public void dspStr();}class CInter1 implements Inter1 {
private Object str;
@Override
public void dspStr() {
// TODO Auto-generated method stub
System.out.println(str); }
public Object getStr() {
return str;
}
public void setStr(Object str) {
this.str = str;
}}public class test2 {
public static void main(String arg0[]) {
CInter1 obj=new CInter1();
obj.setStr(123);
obj.dspStr();
obj.setStr("abc");
obj.dspStr();
}
}
==============
这样好像与接口没有关系了,我本来希望Inter1 obj=new CInter1();
方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现。
重写是父类与子类之间多态性的一种表现,重载是一个类中多态性的一种表现。
所以说就是你调用dspStr才会有多态的概念,因为有重写。
调用dsoInt,用CInter1 obj=new CInter1(123);这种方式不存在失去多态性,因为不存在重写