1、面向对象的特征:
a)抽象:事物的共性;善于划分问题的边界。
b)继承:继承是子类自动共享父类数据和方法的机制。
c)封装:一个对象的方法和属性封装在一起。实现软件部件的“高内聚、低耦合”。
d)多态:一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定即运行时多态。通过方法的重写来实现多态性质的。
2、重点知识理解
1)方法的重载(overload)和重写(override)
重载(overload) | 1、同一类中名称相同的方法、但方法的参数列表不同。 2、不能通过返回值的不同实现overload。 |
重写 | 1、子类中与父类中的某个方法名称和参数完全相同。 2、子类重写父类的方法时,只能比父类抛出更少的异常(父类异 常的子异常)。 3、子类方法的访问权限只能比父类的更大。 4、不能覆盖父类的private方法,如果子类重写一个与父类名称和参数列表完全相同但是访问权限是private的方法,则子类只是定义了一个新方法。而并没有真正重写该方法。 |
2)构造器
构造器不能被重写只能被重载
规则:
a) 假如一个类没有定义构造器,那么编译器会默认一个无参构造器。
b)在子类调用构造器时,总是先调用基类的构造器。
c) 假如自定义了构造器,那么默认构造器将不存在。
3)抽象类和接口
抽象类 | 接口 |
1)可以有构造方法 2)可以有普通方法和普通成员变量,可以没有抽象成员 3)在代码实现方面发挥作用,实现代码的重用 | 1)方法全部都是public abstract类型 2)成员变量都是public static final类型(常量) 3)不能有构造方法 4)在系统架构方面起到作用,用于定义各个模块之间的通信。 |
只能继承一个抽象类,可以实现多个接口 |
4)Object类常见的方法
clone() Equals()finalize()
线程使用的方法:notify() notifyAll() wait() wait(long timeout)
当一个类继承一个基类时,程序代码加载顺序:
1、基类中的静态代码块(只加载一次)、具体类中的静态代码
2、基类中的构造方法、具体类的构造方法
3、静态方法需要调用才会执行。
示例:
class A{ static {//基类静态代码段最先加载、且只加载一次 System.out.print("a"+" "); } public static void prt1(){ System.out.print("1"+" "); } public A(){ System.out.print("A"+" "); } } public class B extends A{ static {//具体类静态代码段在基类静态代码加载后加载、且只加载一次 System.out.print("b"+" "); } public static void prt1(){ System.out.print("2"+" "); } public B(){ System.out.print("B"+" "); } public static void main(String[] args) { B b=new B(); B c=new B(); A a=new A(); B.prt1(); } }
输出:a b A B A B A 2