下面的代码违背了“多态性”!!大家看
Imports System.IO
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim a As TextWriter = File.AppendText( "c:\txt.txt ")‘这里我用TextWriter竟然也行?!但是在MSDN里说的是:(看注释1:)
a.WriteLine( "这些是追加的文本 ")
a.Close()
MsgBox( "追加成功 ")
End Sub
End Class
=========================================
注释1:
Public Shared Function AppendText ( path As String ) As StreamWriter
这里的返回值是一个StreamWriter类型值,按照多态性,使用StreamWriter的父类textwriter肯定是不行的,但VB2005却没提示错误,代码也正常运行了,为什么呢?
按照正常的思维:
StreamWriter肯定能当textwriter类型来用,但是反过来就不行,也就是说父类并不继承子类的特征
希望高人给解答,
谢谢了
[解决办法]
楼上的这位朋友,我稍微给你解释一下
Dim a As TextWriter = File.AppendText( "c:\txt.txt)
这里 a 不是一个对象,只是TextWriter类的一个引用(牢记没有New就没有对象),而我们把一个StreamWriter的对象(返回值)赋给了a,这个是合理的.
为什么这样说呢,请牢记子类的对象总是可以看做是一个父类的对象
打个类比,我需要一个人(人类的一个引用a),我给你一个男人也可以,给你一个女人也可以
也就是说
Dim a as 人 = New 男人()
也可以
Dim a as 人 = New 女人()
但是我说我需要一个男人,你给我一个人可以吗?显然,这未必能成功,所以
Dim a as 男人 = new 人() 是错的
当然如果你非要把一个人的对象赋给一个男人... 那就要强制类型转换了..
不知道我这样说,你明白了没有