先前也问过一个差不多的帖子,但是回贴都是反复强调多态啊什么的 都没真正解我的惑,Set <Integer> intset = new HashSet <Integer>() Set是个接口,为什么对接口建立对象引用而“映射”的却是对类HashSet的构造?
书中说是为了安全,确实,intset无法访问HashSet中Set没有的方法,但是这样有用吗?有没有访问是程序员的事情啊!!!
书中大部分都是这样的构造,不知道这样有什么好处啊?我看向上转型中没这个例子啊? 悟性不行罗...
我猜想的话:是不是intset还可以访问除HashSet外的别的类的方法才这样的还是???
各位前辈指点下新手小弟,现在这个问题已经让我没法继续在书中前行了....
书中说是为了安全,确实,intset无法访问HashSet中Set没有的方法,但是这样有用吗?有没有访问是程序员的事情啊!!!
书中大部分都是这样的构造,不知道这样有什么好处啊?我看向上转型中没这个例子啊? 悟性不行罗...
我猜想的话:是不是intset还可以访问除HashSet外的别的类的方法才这样的还是???
各位前辈指点下新手小弟,现在这个问题已经让我没法继续在书中前行了....
反正建议能用多态的地方最好都向上转型
myclass mc = new myclass(); // mc is myclass type.Set myset = (Set)hs; // 這是安全的
Set myset2 = (Set)mc; // 這是安全的HashSet hs3 = (HashSet) myset; // 這是不安全的
myclass hs4 = (myclass ) myset; // 這是不安全的。
關於為什麼要這麼用,太多了,一時半會兒講不清楚,自己慢慢看吧。
a可以强制向下转换成B
面向接口编程!
Set <Integer> intset = new HashSet <Integer>();
这个代码有两个亮点。
1.安全性,这个体现在<Integer>,这个set实例化后只能add Integer类型的对象,不会add诸如string之类的对象,所以在取的时候不用担心取出来别的类型数据而抛出异常。
2.面向接口编程。intset是Set,具体来说是一个HashSet,如果说我要查询速度,我可以new HashSet(),如果要枚举的时候有序则可以new TreeSet(),而下面的所有代码都不会因为intset类型改变而重写代码。