抽象类
抽象方法
[访问修饰符] abstract 返回值类型 方法名 (参数) [异常列表];
抽象方法的目的:方法的实现没有任何价值,因此不实现方法体,于是构成抽象方法。
注意事项:1.抽象方法即没有方法体的方法
2.父类的抽象方法,子类必须重写实现
3.如果子类不重写父类的构造方法,那么此类也不许定义为抽象类
抽象类
[访问修饰符] abstract class 类名{ //成员变量 //成员方法 }
注意事项:1.抽象类不能创建对象。
2.拥有抽象方法的类必须定义为抽象类。
3.抽象类不一定有抽象方法,抽象类中可以有实例方法。
关键字
final修饰方法
[访问修饰符] final 返回值 方法名 (参数)....
final修饰方法表示此方法不能被覆盖
final修饰变量
[访问修饰符] static final 数据类型 变量名 = 值;
final修饰变量,该变量即使一个常量
注意:常量必须初始化,并且用static修饰,名称大写。
例如: public final static double PI = 3.14;
final修饰类
[访问修饰符] final class 类名{ //成员变量 //成员方法 }
注意:final修饰的类不能被继承。
多态
什么是多态?
多态就是: 同一个引用类型,使用不同的实例而执行不同操作。
为什么要使用多态?
多态解决了程序的拓展性问题。
怎么实现多态?
1.继承,子类重写父类的方法。
2.父类的引用指向子类对象
多态分类
编译时多态
编译阶段该对象属于哪个类,则调用哪个类的方法。
public void feed(Pet pet){ pet.eat(); }
运行时多态
运行阶段,根据对象的引用找到对堆中实际类的对象,调用实际的方法的原型。
Mater mater = new Mater(); Pet dog = new Dog(); Pet cat = new Cat(); mater.feed(dog); mater.feed(cat);
多态对象转换问题
1.子对象转换为父对象
Pet dog=new Dog();//狗是子类,宠物是父类
2.父对象转换为子对象 [ClassCastException]
Pet pet = new Snake(); if(pet instanceof Dog){ //判断pet对象实际的原型是否为Dog类 Dog dog = (Dog)pet; dog.band(); }
接口
什么是接口?
接口是一种强制遵守的约束(规范),如果不遵守规范则无法使用接口。
为什么使用接口?
原因:Java的继承只能实现单继承,如果要同时实现继承父类,然后再继承其他元素,那么Java的继承是无法实现的。
解决方法:使用Java的接口,通过接口的实现,简介实现Java的多继承
例如: Son 继承 Father和Mother
public Class Son extends Father implements Mother(接口)
怎么实现和使用接口?
1.定义接口
[访问修饰符] interface 接口名称{ //成员变量 //成员方法 }
2.实现接口
public Class 子类 implements 接口1,接口2,接口3...{ //重写父接口的方法 }
注意事项
-
接口的方法必须是公共的抽象(默认)方法。(jdk1.8版本时候也可以写公共静态方法)
-
接口没有构造方法,所以接口不能实例化。
-
接口的成员变量必须是public & static 的常量(final)(默认)
-
接口的方法子类必须实现(重写)
-
接口可以多实现。
类与类的关系
-
is...a:继承
例如:Student is a Person
-
has...a:拥有
例如: Student has a Phone
内部类
内部类对象创建
A.B b = new A().new B();
静态内部类
A.B b = new A.B();
匿名内部类
接口名称(抽象类) 对象名 = new 接口名(){ //接口方法的覆盖 }
代码块
代码块
执行时机:对象被创建之前
作用:对象创建之前的加载或者初始化工作
静态代码块
执行时机:类加载时
作用:对类在加载时做一些初始化工作,只执行一次。
异常
Throwable
异常(Exception)
依靠程序本身就可以解决的非严重性问题
运行时异常(RuntimeException)
NullPointerException:空指针异常 ArithmeticException:算数异常
检查异常(CheckException)
错误(Error)
依靠程序本身无法解决的严重性问题
异常处理
try:捕获异常
catch:处理相对性的异常
finally:无论异常是否发生,都必定会执行,通常会释放一些内存资源,例如IO流对象的释放
注意
1.catch可以有多个
2.当发生对应类型异常时,JVM创建对应类型的异常对象
3.catch后的异常类型,一定要按照从子到父的顺序处理
4.异常处理语句中有return,则先执行finally,再执行return