/*
子类抛出的异常 只可以是父类抛出异常范围以内。
使用javac 的时候会将源码转换为字节码
之后会生成一个会有一个叫常量表的东西,这个时候常量表中的还是可见的,也是易读的符号引用。
当进入解析阶段的时候,常量池中的符号引用会被替换成直接引用,也就是常量池中符号所代表的内存地址中的对象。
上一章的继承 需要再添加一个需要注意:
子类重写父类的方法其中权限修饰符只能放大权限,不能缩小权限,不能用static修饰重写方法,子类抛出的异常必须
为父类异常的子类或相同类。
变量:
变量的类型+变量的名字
变量是用来存储信息的容器
集合:
集合的类型+集合名字
集合就是一个容器,把一组相同类型的变量保存起来的容器。
集合架构:
Collection -> List -> ArrayList/LinkedList
Collection -> Set -> HashSet/TreeSet
Map -> HashMap/TreeMap
集合会有一个相同类型的数据,就是泛型<T>
Collection和Map是平级的。
Collection 定义了一些集合常用的基本方法.
jdk1.8 中为什么引入了default关键字,可以给予接口实现默认方法?有什么好处?
便于扩展接口中的方法而不破坏原有的继承体系。
如果没有这个特性,那么如果我想给所有的collection接口的子类。扩展这么一个stream的功能,
那我是不是需要重新构造这个继承体系。
在面向对象编程中,我们一定要遵循的法则之一也是最重要的一点:
那就是开闭原则。 -> 对修改封闭对扩展开放。
interface A {
default void say(){
System.out.println("你好王富贵");
};
}
public class Test implements A {
static void f() {
System.out.println("我是啦啦啦");
}
public static void main(String[] args) {
Test.f();
}
}
看上面的代码,这样的话,给出默认的实现,接口就不需要强制性的重写方法,会给予一个默认的共通的实现方法。
如果需要重写也可以进行一个重写。
子类向上转型之后,只可以使用父类的方法。
Collection<T> 类被实现了,比如,AbstractCollection<E>类已经被实现了,又被List<E> 实现了,AbstractCollection<E>类
又被AbstractList<E> 继承了,那么ArrayList<E> 类为什么继承了AbstractList<E> 还要实现List<E> 类?AbstractList<E>
又为什么也要继续实现List<E> 类?
答案:
通过AbstractCollection<E> 的源码可以看出这个实现了Collection<T> 部分功能,但是部分方法没有被实现。
这种模式,叫做,模板方法模式 -> 给你提供一些通用的方法,其它的交给子类去实现,子类在父类的基础上,必须要
实现这些方法。
*/