java 随笔,
java 随笔,
1231
SuperClass s1 = new SubClass(20);
这一行代码的意思是父类的引用指向了子类的对象,也就是说java里说的多态,
s1这个引用能调用的方法必须是SubClass(子类)类里重写了SuperClass (父类)的方法。
而实例化SubClass对象时又必须先执行父类的构造方法SuperClass(){ a = 10; }
父类引用不能访问子类的 独有方法; 子类引用可以访问父类方法。
继承的好处:让共同部分,可以复用.避免重复编程.
继承的不好:耦合性高.一旦超类添加一个新方法,子类都继承,拥有此方法, 若子类相当部分不实现此方法,则要进行大批量修改. 继承时,子类就不可继承其它类了. 接口的好处:解决了继承耦合性高的问题. 且可让实现类,继承或实现其它类或接口. 接口的不好:不能真正实现代码的复用.可用以下的策略模式来解决.类型通配符的作用
前一屏 类型通配符 中引入了类型通配符,这让您可以声明 List<?> 类型的变量。您可以对这样的 List 做什么呢?非常方便,可以从中检索元素,但是不能添加元素。原因不是编译器知道哪些方法修改列表哪些方法不修改列表,而是(大多数)变化的方法比不变化的方法需要更多的类型信息。下面的代码则工作得很好:
List<Integer> li = new ArrayList<Integer>();
li.add(new Integer(42));
List<?> lu = li;
System.out.println(lu.get(0));
为什么该代码能工作呢?对于 lu,编译器一点都不知道 List 的类型参数的值。但是编译器比较聪明,它可以做一些类型推理。在本例中,它推断未知的类型参数必须扩展 Object。(这个特定的推理没有太大的跳跃,但是编译器可以作出一些非常令人佩服的类型推理,后面就会看到(在 底层细节 一节中)。所以它让您调用 List.get() 并推断返回类型为 Object。
另一方面,下面的代码不能工作:
List<Integer> li = new ArrayList<Integer>();
li.add(new Integer(42));
List<?> lu = li;
lu.add(new Integer(43)); // error
相关文章
- 暂无相关文章
用户点评