第4课 面向对象下
必须掌握内容
1、继承
Java支持单继承不允许多继承 可以有多层继承 子类继承父类的所有成员变量和成员方法但不继承父类的构造方法在子类的构造方法中可以使用super语句调用父类的构造方法 但是如果子类中没有显式地调用父类的构造方法 也没有使用this关键字调用重载的其他构造方法 则在子类的实例对象中默认调用父类无参数的构造方法
如果定义了一个或多个参数不同的构造函数 则系统就不会自动调用父类的无参数的构造函数 但是最好还是新建一个无参数的构造函数 因为系统在调用父类的时候 会首先调用其无参数的构造函数 而在子类中如果定义了有参数的构造函数 则不会产生一个无参数的父类构造函数 那么在编译的时候就找不到这个无参数的构造函数 因为编译器会报错
用this调用某些构造函数的时候 有些情况类似于super函数
隐式调用就是系统会自动调用super函数
Super函数和this函数不能同时存在 其都只能作为第一句出现
子类改写父类方法后 调用是只调用子类方法 要想调用父类方法 只能用super super方法是父类方法 而不是该方法在子类中的重写
重写方法时不能将方法的访问权限变低
2、Final定义变量时候赋值 或者在构造方法中赋值
变量加上static时 可以用类名点变量名来访问 但是必须在定义时初始化
3、抽象类
Java定义一些不含方法体得方法 其方法体交友该类的子类根据自己的情况去实现 这样的方法称之为抽象方法 包含抽象方法的类就叫做抽象类
抽象类必须有abstract关键字修饰 抽象方法也是由abstract修饰 抽象类不能被实例化也不能用new产生一个对象 其只需要声明 但不必去实现 但是抽象类的子类必须覆盖所有的抽象方法后才能别实例化 否则其子类称之为抽象类
其实抽象类等同于一个接口
4接口
接口就是抽象方法和常量值的定义的jihad 从本质上讲 接口就是一种特殊的抽象类 这个抽象类中只含有常量和方法的定义 没有方法和常量的实现
接口中的成员都是public 变量默认为public static final 是不能轻易改变的
在接口可以用extends关键字来继承一个已有的接口 也可以用一个类加上implements关键字去实现一个接口中的所有方法 还可以定义一个抽象类用implements去实现接口中的部分方法
一个类可以继承一个父类的同时也可以实现一个或者多个接口 extends关键字必须位于implements之前
同一目录下类可以互相调用
父类定义的静态常量 可以用子类名点常量名引用
对象的类型转换 子类对象能自动转换成父类
父类转换成子类就必须使用强制类型转换
If(a instanceof b)判断a是否为b的对象
匿名内部类
abstract class A
{
abstract public void fun1();
}
class Outer
{
public static void main(String [] args)
{
new Outer().callInner(new A()
{
public void fun1()
{
System.out.println("implement for fun1");
}
});
}
public void callInner(A a)
{
a.fun1();
}
}
5、异常
不是编译时的语法错误 是一种非致命的错误
Try catch 语句 try{执行语句} 如果异常 则执行catch{}语句
Catch(exception e)
{
System.out.println(e.getMessage());中的e.getMessage()是获取错误信息
} 执行完catch语句之后才会执行其他语句
如果try中语句异常 系统生成一个异常对象 也就是catch语句中的e e就是异常对象 有时候也被定义为ex
如果有可能发生异常 则可以用throw exception来抛出异常 此时必须使用try catch语句处理可能出现的异常
如果不想使用try catch语句处理误
定义异常类 如果是异常类 必须继承exception 异常类的构造函数可以调用super生成自己的异常对象并抛给外面
Throw new---可以声明多个异常对象个抛出
Try 后可以跟多个catch e.exception trace()直接将异常对象抛出
根据异常类型的不同 执行不同的catch语句
如果异常没有可以匹配的catch语句 则执行Catch(exception e)
语句 此语句不可以放在其他catch语句之前 否则其他的异常处理语句不会被执行 因为其他的异常语句都是Catch(exception e)的子类
并不是异常才可以使用try catch语句 其他情况也可以使用 比如选择 跳转语句等等
在catch语句后加上final语句 其意义就是说不管有没有异常发生 都会执行final语句的内容 即给程序提供一个统一的出口
注意 如果try语句或者catch语句中有return语句 则其他语句可能不被执行 但是final可以被执行
Final唯一不被执行的情况是前面有system,exit()
子类中不能抛出新的异常 子类总的异常不能比父类多 只能比父类的少
6、包 包就相当于是文件夹
package语句及应用
package语句作为Java源文件的第一条语句。如果没有package语句,则为缺省无名包。
import语句及应用
jdk中常用的包
java.lang----包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。
java.awt----包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。
java.applet----包含applet运行所需的一些类。
java.net----包含执行与网络相关的操作的类。
java.io----包含能提供多种输入/输出功能的类。
java.util----包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。
7、Java的命名习惯
下面是java中的一些命名习惯,假设xxx,yyy,zzz分别是一个英文单词的拼写。
包名中的字母一律小写,如:xxxyyyzzz。
类名、接口名应当使用名词,每个单词的首字母大写,如:XxxYyyZzz。
方法名,第一个单词小写,后面每个单词的首字母大写,如:xxxYyyZzz。
变量名,第一个单词小写,后面每个单词的首字母大写,如:xxxYyyZzz。
常量名中的每个字母一律大写,如:XXXYYYZZZ