黑马程序员技术交流社区
标题:
【赐教】父类引用指向子类实例的好处?
[打印本页]
作者:
黄方
时间:
2012-3-4 18:16
标题:
【赐教】父类引用指向子类实例的好处?
高手指教一下区别:在这儿我就没写下面的类了,只写了测试类的代码:问题:父类引用指向子类对象 和 直接实例化对象结果还不是一样的,为什么要搞得那么复杂咧?在这里体现不出任何子类指向父类对象的好处啊(多太的一种),那么在什么情况下才能更好的看出父类引用指向子类的好处咧?【求高手指教】‘’
public class GraphicsTest {//测试程序类
public static void main(String[] args) {
Graphics gc= new Graphics();// Graphics为父类
gc.calArea();
gc = new Rect();// Rect为子类(父类引用指向子类对象)
gc.calArea();
gc = new Circle();//Rect为子类(父类引用指向子类对象)
gc.calArea();
Graphics gc1= new Graphics();
gc1.calArea();
Rect r=new Rect ();//实例化对象
r.calArea();//调用方法
Circle c=new Circle();
c.calArea();
}
}
作者:
马胜平
时间:
2012-3-4 18:29
本帖最后由 马胜平 于 2012-3-4 18:31 编辑
这种向上转型在运行期虚拟机能够知道它的确切类型,好处是例如有方法 void fun(Father f)这时候f可以是Father的任意子类,灵活性很大,如果传递的是一个子类具体类型那就写死了。这种写法尤其是在面向接口编程中常用,如果Father是一个接口,那么每个人的实现了这个接口类的对象,这个函数都可以接收。
作者:
许圣建
时间:
2012-3-4 18:41
标题:
我所知有限,谈谈我所知道的具体的一点
本帖最后由 许圣建 于 2012-3-4 18:42 编辑
我觉得你这里看不明显,当你有很多同一个父类(接口)的子类同时用一个容器来存储时,你会发现取出来的时候必须重新转型才能使用确切的方法,
那么既然有共同的父类,就可以直接用父类的然后多态了,否则必须挨个判断:instanceof,显然不合理。下面是一个Tij上的例子:
//: c10:Shapes.java
import com.bruceeckel.simpletest.*;
class Shape {
void draw() { System.out.println(this + ".draw()"); }
}
class Circle extends Shape {
public String toString() { return "Circle"; }
}
class Square extends Shape {
public String toString() { return "Square"; }
}
class Triangle extends Shape {
public String toString() { return "Triangle"; }
}
public class Shapes {
private static Test monitor = new Test();
public static void main(String[] args) {
// Array of Object, not Shape:
Object[] shapeList = {
new Circle(),
new Square(),
new Triangle()
};
for(int i = 0; i < shapeList.length; i++)
((Shape)shapeList[i]).draw(); // 这里
//monitor.expect后面是预期打印结果
monitor.expect(new String[] {
"Circle.draw()",
"Square.draw()",
"Triangle.draw()"
});
}
} ///:~
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2