Java知识查漏补缺-04

Java基础学习day04
(p341-395)

抽象类和抽象方法(abstract)
  • 以前是子类直接extends继承父类,但这时父类还不是一个抽象的类,他可以自己实例化;为了让父类只作为一个提供方法的类,而不用去做具体的实现,把方法实现延迟到子类的去做,高内聚低耦合,这使得抽象类是无法实例化的;
  • 抽象类和普通类一样,必须要有构造器,这必须符合子类实例化对象的要求,就是调用父类的构造器;
  • 抽象方法的声明public static void eat(); 注意,抽象方法并没有方法体,只有方法的声明,方法体的实现交给子类去完成
  • 包含抽象方法的类一定是个抽象类,反之不成立
  • 子类必须重写父类的所有抽象方法,普通方法不需要
  • abstract只能抽象方法和类,不能抽象私有方法、静态方法、final方法、final类
 
 
设计模式——模板方法
 
 
接口(Interface)
  • 类只能单继承,接口可以多实现
  • JDK7以前,只能定义全局变量和抽象方法
               全局变量: public static final 
                抽象方法:public abstract 
  • 接口不能定义构造器,表明接口不能被实例化,接口的定义方法interface A{},说到底也是一个类,不是方法,没有括号
  • 接口通过让类的实现implement方式来使用
                如果实现类实现了接口中的所有抽象方法。则此实现类就可以实例化
                如果实现类没有实现接口中的而所有抽象方法,这此实现类仍然是一个抽象类
  • 接口也可以继承接口,而且可以继承,interface A{} ;interface B extends A{}
  • 电脑的驱动就是USB接口的实现,数据库的连接实现也就是JDBC接口,接口也满足多态性
  • 体会面向接口编程
 
 
设计模式——代理模式,工厂模式
 
 
接口面试题
解析:接口和类属于同一层次,不同于子父类和父类的继承,所以编译时就会报错,提示x指示不明确
 
继承至B,所以可以用super;接口的内部常量是全局变量,只是这里可以省略不写static,所以就可以用A.x调用,即类.类变量
 
 
 
 
JDK8的新特性
  • 接口中可以定义静态方法,并且只能通过接口来调用;
  • 接口中可以定义默认方法,默认方法可以通过实现类的对象去调用;
  • 如果实现类重写了接口中的默认方法,调用时,仍然是调用重写后的方法
  • 如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的方法,那么子类在没有重写此方法的情况下,默认调用的是父类中的同名同参数的方法。-- >类优先原则
  • 如果实现类实现了多个接口,而这多个接口中定义了同名同参数的默认方法,那么在实现类没有重写此方法的情况下,报错。-->接口冲突,想用的话必须在子类重写该方法
 
 
内部类
了解
 
 
 
异常处理
Error :  java虚拟机也无法处理的错误,一般不编写针对性的代码进行处理
Excepction:可以处理