继承:描述书屋之间的所属关系,在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有的类被称作父类,子类继承了父类的特征(所有可继承的属性和方法)
派生:父类派生出了子类
子类是父类的特类,子类是父类型。一个子类对象可以看作一个父类、
在java中类只支持单继承,不允许多重继承,也就是说一个类只能有一个直接父类,多个类可以继承一个父类,可以多层继承,子类和父类是一种相对概念
在调用子类中无参的构造方法,它会调用父类的无参的构造方法
重写父类方法:
在子类中重写的方法需要和父类被重写的方法具有相同的方法名、参数列表以及返回值类型
不能使用比父类中被重写的方法更严格的访问权限:private、protected、public
当子类重写父类的方法后,子类对象将无法访问父类被重写的方法,在java中用super关键字用于访问父类的成员。
super调用父类的构造方法的代码必须位于子类构造方法的第一行,并且只能出现一次
final关键字可用于修饰类、变量以及方法,表示最终的含义:
1、final修饰的类不能被继承
2、final修饰的方法不能被子类重写(只能继承,把方法锁定,以防止任何继承类修改它的含义)
3、final修饰的变量(成员变量和局部变量)是常量(就用static生成一个内存区,不必浪费内存空间),只能赋值一次
抽象定义:抽象就是从多个事物中将共性的、本质的内容提取出来
抽象方法不需要方法体,抽象方法对应抽象类,类是抽象的只能作父类(abstract),不能用来创建对象,如果要创建对象,必须去把抽象方法具体化(即继承这个抽象类)
抽象方法:abstract 函数类型 函数名(参数列表); //包含抽象方法的类必须声明为抽象类,但是抽象类可以不包含任何抽象方法,只需使用abstract关键字修饰即可
abstract不与final、static连用
接口(interface)是最纯粹的抽象类(类中的方法都是抽象的)
interface 接口名{ 变量类型 变量名=常量值; 方法类型 方法名(); }
接口中定义的方法和变量名都包含一些默认修饰符:方法使用public abstract修饰,变量用public static final修饰
接口与类:implements,可以实现多个接口,接口与接口之间用逗号隔开
接口与接口:extends,可以继承多个接口,接口与接口之间用逗号隔开
一个类在继承另一个类的同时还可以实现接口,此时,extends关键字必须位于implements关键字之前
多态:一个名称多种实现
1、重载(overload):定义多个名称相同参数不同的方法
2、覆盖(override):在子类中定义与父类声明相同的方法(1、equals:比较两个对象的内容是否相同 2、==:判断两个对象是否为同一个对象的不同引用)
java提供了一个关键字instanceof,它可以判断一个对象是否为某个类(或接口)的实例或者子类实例,语法格式为:对象(或者对象引用变量) instanceof 类(或接口)
JDk中提供了一个Object类,它是所有类的父类,即每个类的父类,即每个类都直接或间接继承自该类
hashCode()是object类中定义的一个方法,这个方法将对象的内存地址进行哈希运算,返回一个int类型的哈希值
异常:以异常类(Throwable)的形式对这些非正常情况进行封装
1、error:通常出现重大问题:如运行的类不存在或者内存溢出。不编写针对代码对其处理,仅修改程序本身是不能恢复执行的
2、Exception:在运行时进行出现的一起情况,可以通过try——catch——finally(必须执行,除非遇到System.exit(),return都不行)解决
Syetem.out.println() //黑体 System.err.println() //红色
Throwable常用方法:、 String getMessage() //返回此Throwable的详细消息字符串 void printStackTrace() //将此throwab及其追踪输出至标准错误流 void printStackTrace(printStream s) //将此throwa及其追踪输出到指定的输出流
一个try可能带多个catch,try中含有多个不同异常分别对应多个catch处理1、写多个catch时,需要从子类写到父类的异常。2、写一个catch时,直接写Exception e
catch代码块对异常处理完毕后,程序仍会向下执行,而不会异常终止,在try代码块中,发生异常语句后面的代码是不会被执行的。
throws 用在函数上,后面跟异常类(在main函数抛出异常,不负责任,系统将强制关闭)
throw用在函数内,后面跟异常对象
包:package(需要注意:包的声明只能位于java源文件的第一行)
如果用到一个包中的许多类使用“import 包名.&;”来导入改包所有类
访问控制级别
private default protected public
同一类中 1 1 1 1
同一包 0 1 1 1
子类中 0 0 1 1
全局范围 0 0 0 1