如果A abc = new B()
和A
类,B
类具有继承关系,那么使用引用类型A
而不是B
有什么好处,如果使用了B
?现在B
的对象可以访问哪些方法(所有A
和B
方法或其他方法)?同样,如果A和B都具有相同的方法,则B会覆盖它,但是如果它们具有不同的方法,则对象可以在此处访问其方法?
答案 0 :(得分:1)
假设您有:
public class A {
public void a(){
}
}
public class B extends A{
public void b(){
}
}
您不能使用B b = new A();
您可以使用A a = new A();
,在这里您可以访问a()
方法。
您可以使用A a = new B();
,在这里您可以访问a()
方法。
您可以使用B b = new B();
,在这里您可以访问两种a(), b()
方法。
那么拥有A a = new B()
有什么好处?
假设您具有类B,C,D,E,并且它们全部扩展了类A或实现了接口A。现在您可以拥有A a = new B(); A a = new C(); A a = new D()
并在运行时检查类型,然后将对象转换为特定的类类型,因此您无需为每种类型声明3个变量。您所有A类型变量都有一个容器(变量),它也是子容器(B,C,D)。
答案 1 :(得分:0)
让我们以Java Collections API为例。为了简洁起见,请考虑以下层次结构:
Collection -> ArrayList
现在,这些语句有效:
Collection
的实例可以使用方法isEmpty()
。ArrayList
的实例可以使用方法isEmpty()
和add()
。现在,这取决于您要对实例执行的操作。如果需要添加新元素,请使用允许它的实现。如果没有,那么最好使用您真正需要的最少实现或对象。
示例:如果需要从DAO返回的列表大小,请使用Collection
代替List
或其任何实现:
Collection collection = dao.getListFromDatabase();
int size = collection.size();