面向对象

1、类与对象

  类是描述相同事物的共同特征的抽象;

  对象是具体存在的实例,是真实的,是类的具体;

2、类的五大成分(有且仅有)

  • 成员变量(Filed:描述类和对象的属性信息的);
  • 成员方法(Method:描述类或者对象的行为信息的);
  • 构造器(Constructor:初始化一个雷的对象并返回引用);
  • 代码块
    按照有无static区分:
      静态代码块【重点】  -  属于类,会与类一起优先加载,而且自动触发一次;可以用于执行类的方法之前进行静态资源的初始化操作;
           实例代码块  -  属于类的每个对象,会与类的每个对象加载;每次实例化类的时候执行一次;实例代码块可以用于初始化实例资源;实例代码块的代码实际上是提取到每个构造器中执行的;

  • 内部类
      静态内部类  -  在外部类内部,static修饰;可以访问外部类的静态成员,不能访问实例成员

    外部类名称.内部类名称 对象名称 = new 外部类对象.内部类对象

      实例内部类(成员内部类)  -  属于外部类对象,不能定义静态成员

    外部类名称.内部类名称 对象名称 = new 外部类对象.new 内部类对象

      局部内部类  -  代码块中定义【木有软用】
      匿名内部类(重点)  -  就是一个没有名字的局部内部类,为了简化代码;

3、三大特征

  3.1 封装  -  隐藏实现细节,提供公共访问方式;可以提高安全性,实现代码的组件化;

  3.2 继承  -  子类到父类的一种关系,子类继承一个父类,就可以直接得到父类的属性和行为;提高代码的复用;

    访问特点:就近原则,子类有就用子类的,子类没有父类找,父类没找到就报错;

    构造器的特点:子类构造器默认一定会先访问父类的无参构造器,再执行子类的构造器;

    方法重写要求:

      方法名和形参列表要和父类一致;

      返回值类型范围小于等于父类的;

      修饰符权限要大于等于父类的权限;

      抛出的异常要小于等于父类;

  3.3 多态  -  父类的引用指向子类的对象  Person person = new Student();同一个类型的对象,执行同一个行为,在不同的状态下会表现出不同的行为特征;

    识别技巧:

      方法的调用:编译看左边,运行看右边;
      变量的调用:编译看左边,运行看左边;

4、权限修饰符

  

private

缺省

protected

public

本类中

可以访问 可以访问 可以访问 可以访问

本包下其他类中

  可以访问 可以访问 可以访问

其他包下的类中

      可以访问

其他包下的子类中

    可以访问 可以访问

5、关键字说明

  5.1 this关键字  -  代表了当前对象的引用;

  5.2 static关键字  -  区分成员变量和成员方法是属于类还是属于对象的,表示在内存中只能有一份;

  5.3 final关键字  -  最终的含义,可以用于修饰类,方法,变量;

    修饰类:类不能被继承;

    修饰方法:方法不能被重写;

    修饰属性:属性有且仅能被赋值一次;

    扩展1: final, finally, finalize的区别?     

      final: 用于声明属性, 方法和类, 分别表示属性有且仅能被赋值一次, 方法不可覆盖, 被其修饰的类不可继承。
      finally: 异常处理语句结构的一部分, 表示一定会执行。
      finalize: Object 类的一个方法, 在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收, 例如关闭文件等。

    扩展2:常量的定义

public static final

6、抽象类

  6.1 是什么  -  拥有抽象方法的类,抽象类不能被实例化;

  6.2 作用  -  为了被子类继承,约束子类必须重写抽象方法;

  6.3 注意事项

    抽象类不能被实例化;

    抽象类有且必须有构造器,用于提供给子类创建对象时初始化父类成员使用的;

    抽象类中,不一定有抽象方法,拥有抽象方法的类一定是抽象类;

    抽象类的子类,必须重写父类的抽象方法,否则子类也必须定义为抽象类;

    抽象类存在的意义是为了被子类继承,抽象类体现的是模板思想。;

7、接口

  7.1 是什么  -  接口体现的是规范思想、约束,接口比抽象类更抽象,是更加彻底的抽象,子类实现接口,必须重写全部的抽象方法,在JDK1.8前接口只能是抽象方法和常量;

  7.2 接口的成分

#抽象方法
public abstract 返回值类型 方法名(形参);//public abstract 可省略

#默认方法,其实就是我们之前写的实例方法只能用接口的实现类调用
public defalut  返回值类型 方法名(形参){
  方法体...  
}//public可省略

#静态方法,接口的静态方法只能用接口的类名称调用
public static 返回值类型 方法名(形参){
  方法体...  
}//public可省略

  7.3 注意事项

    如果实现了多个接口,多个接口中存在同名的静态方法并不会冲突;原因是只能通过各自接口名访问静态方法;

    当一个类继承父类并实现若干接口,父类中成员方法和接口默认方法重名时,子类就近选择父类的成员方法;

    当一个类实现多个接口时,多个接口存在同名的默认方法;实现类必须重写这个方法;

    接口中,没有构造器,不能创建对象;

原文地址:https://www.cnblogs.com/xp2h/p/12518575.html