自己写了个例子,希望可以对楼主有点帮助 abstract class A{ public void get(); public void set(); } class B extends A{ public void get(){ //自己的实现; } public void set(){ //自己的实现; } } class C exntends A{ public void get(){ //自己的实现; } public void set(){ //自己的实现; } } class d { public static A getObj(){ return new c(); } } A obj=d.getObj(); obj.get(); //调用的是Class c 的get()方法现在我们来看下class d中的getObj返回类型,它可以返回A,也可以返回C,显然返回A更加能用一点,因为这样一来,它可以返回的对象更加广泛,比如可以把new C(),改成new B(),以及其它任何继承了A的子类都可以,在调用方法的时候,根据程序的多态就可以调用子类中相应的实现方法了。这种情况在接口也很多见。 总之,不论是接口,还是抽象类,它们本身是不可能有对象的,方法中返回的只不过是实现了这个接口,或者继承了这个抽象类的实体类的一个对象。
窗体.getGraphics()返回的不再是一个Abstract Graphics a,而是一个extended Graphics b,b同时也是Abstract Graphics,所以b可以以a的形式返回 不仅 abstract class,可以如此,interface 也可以如此 public abstract class Abs{...} public class Ext extend Abs{...} ... Abs a= new Ext();//这么说你明白了吗?
abstract class A{
public void get();
public void set();
}
class B extends A{
public void get(){
//自己的实现;
}
public void set(){
//自己的实现;
}
}
class C exntends A{
public void get(){
//自己的实现;
}
public void set(){
//自己的实现;
}
}
class d {
public static A getObj(){
return new c();
}
}
A obj=d.getObj();
obj.get(); //调用的是Class c 的get()方法现在我们来看下class d中的getObj返回类型,它可以返回A,也可以返回C,显然返回A更加能用一点,因为这样一来,它可以返回的对象更加广泛,比如可以把new C(),改成new B(),以及其它任何继承了A的子类都可以,在调用方法的时候,根据程序的多态就可以调用子类中相应的实现方法了。这种情况在接口也很多见。
总之,不论是接口,还是抽象类,它们本身是不可能有对象的,方法中返回的只不过是实现了这个接口,或者继承了这个抽象类的实体类的一个对象。
不仅 abstract class,可以如此,interface 也可以如此
public abstract class Abs{...}
public class Ext extend Abs{...}
...
Abs a= new Ext();//这么说你明白了吗?