一、类的继承:extends
• 通过继承可以简化类的定义。2、java只支持单继承,不允许多重继承。
• 但可以有多层继承,即类的嵌套定义。4、子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法。在子类的构造方法中可使用语句super(参数列表)调用父类的构造方法。5、若子类的构造方法中没有显示的调用父类的构造方法,也没有使用this关键字调用重载的其他构造方法则在产生子类的 实例对象时,系统默认调用父类无参数的构造方法。
二、子类对象的实例化过程:
• 分配成员变量的存储空间并进行默认的初始化,就是用new关键字产生对象后,对类中的成员变量进行相应的初始化赋值;
• 绑定构造函数参数,就是new Person(实际参数列表)中所传递进的参数赋值给构造方法中的形式参数变量;
• 如有this()调用,则调用相应的重载构造方法,被调用的重载构造方法的执行流程结束后,回到当前构造方法,当前构造方法直接跳转到步骤6执行;
• 显示或隐式追搠调用父类的构造方法,父类的构造方法又从步骤2开始对父类执行这些流程,父类的构造方法的执行流程结束后,回到当前构造方法,当前构造方法继续往下执行;
• 进行实例变量的显式初始化操作,也就是执行在定义成员变量时就对其进行赋值的语句;
• 执行当前构造方法的方法体中的程序代码。
注意:1、super()和this()调用语句不能同时在一个构造函数中出现
• super()或this()调用语句只能作为构造函数中的第一句出现。
三、子类中的方法要覆盖父类中的方法,就不能将父类中的方法的权限变弱,即子类中的方法权限不能低于父类中的方法的权限。
四、final关键字:
1、 在java中声明类、属性和方法时,可用关键字final来修饰;
2、 final标记的类不能被继承;
3、 final标记的方法不能被子类重写;
4、 final标记的变量(成员变量和局部变量)即成为常量,只能赋值一次
5、 方法中定义的内置类只能访问该方法内的final类型的局部变量,用final定义的局部变量相当于一个常量;
6、 public static final共同标记常量时,这个常量就成了全局常量。
区别:public final 的赋值可以在刚定义时初始化,也可以在构造函数中进行初始化; public static final 的赋值只能在定义时进行,且这种变量不需要产生对象就可以通过类名.变量名的方法直接引用。
五、抽象类:
java中可以定义一些不含方法体的方法,它的方法体的实现交给该类的子类根据自己的情况去实现,这样的方法就是抽象方法,包含抽象方法的 类就叫抽象类。
1、 抽象类必须用abstract关键字来修饰,抽象方法也必须用abstract来修饰;
2、 抽象类不能被实例化,即不能用new关键字去产生对象;
3、 抽象方法只需声明,而不需实现;
4、 含有抽象方法的类必须被声明为抽象类,抽象类的子类必须覆盖所有的抽象方法后才能被实例化,否则这个子类还是抽象类。
六、接口:
1、若一个抽象类中的所有方法都是抽象的,我们就可以将这个类用另外一种方式来定义,即接口。接口是抽象方法和常量值的定义的集合, 本质上,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实
现。
2、接口中的成员都是public访问类型的,接口中的变量默认是用public static fina标识的;
3、可以定义一个新的接口用extends关键字去继承一个已有的接口;
5、 也可以定义一个类用implements关键字去实现一个接口中的所有方法,还可以定义抽象类用implements关键字去实现一个接口中定义的部分方法;
6、 一个类可以继承一个父类的同时,实现一个或多个接口,extends关键字必须位于implements关键字的前面。
七、对象的类型转换:
1、子类对象可以自动转换为父类
2、父类转换为子类必须强制转换
3、instanceof操作符可以用它来判断一个实例对象是否属于一个类
• Object类及equals方法
八、面向对象的多态性:
1、 应用程序不必为每个派生类(子类)编写功能调用,只需要对抽象基类进行处理即可。“以不变应万变”,可以提高程序的可复用性;
2、 派生类的功能可以被基类的引用变量引用,即向后兼容,可以提高程序的可扩充性和可维护性。以前编写的程序可以被后来的程序调用不足为奇,现在编写的程序(如 callA方法)能调用以后写的程序(以后写的一个A的子类,与类D)就了不起了。
九、异常:
1、 异常定义了程序中遇到的非致命错误,而是编译时的语法错误,如程序中打开一个不存在的文件、网络连接中断、操作数越界、装载一个不存在的类等;
try,catch语句;throws关键字;自定义异常与 Throws关键字;
2、 我们可以在一个方法中使用throw,try……catch语句来实现程序的跳转;
3、 一个方法被覆盖时,覆盖它的方法必须扔出相同的异常或异常的子类;
4、 若父类扔出多个异常,那么重写(覆盖)方法必须扔出那些异常的一个子集,即不能扔出新的异常;
一○、包(package):
1、 package语句作为java源文件的第一条语句。若没有package语句,则为缺省无名包;
2、 jdk中常用的包:
??java.lang---包含一些java语言的核心类,如String,Math,Integer,System和Thread,提供常用功能;
??java.awt---包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI);
??java.applet---包含applet运行所需的一些类;
??java.net---包含执行与网络相关的操作的类;
??java.io---包含提供多种输入/输出功能的类;
??java.util---包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。
同一个包中的两个类不一定在同一个目录中,其路径由classpath指定。Classpath的路径不要指到包名的目录路径上,而要指到包名所对应的父目录的路径上;创建包名可生成文件夹,但创建文件夹并通过classpath指定其路径不会当作包使用。
import语句调用的包只能调用当前包,而不会调用当前包下的子包
一一、访问控制:
类本身也有访问控制,即在定义的class关键字前加上访问控制符,但类本身只有两种访问控制,即public和默认,父类不能是private和pritected,
否则子类无法继承。Public修饰的类能被所有的类访问,默认修饰(即class关键字前没有访问控制符)的类,只能被同一包中的所有类访问。