java之类和对象

31 阅读5分钟

类的组成结构

构造器

  1. 每个类如果没有显示声明构造器,会默认创建一个无参构造器
  2. 构造器如果没有显式调用super()或this(),会默认执行super()
  3. 构造器可以存在重载,并且在构造器内可以调用其他重载的构造器

代码块

  1. 分为静态代码块和非晶态代码块

静态代码块

  1. 随着类的加载而执行
  2. 永远只执行一次

非静态代码块

  1. 随着对象的创建而执行
  2. 每创建一个对象就执行一次

属性

类属性

  1. 使用static修饰的属性是静态属性,也是类属性
  2. 类属性是在类加载的时候加载的,存储在类上,所有对象公用一个类属性
  3. 类属性可以通过“类.类属性”或“对象.类属性”的方式调用

实例属性

  1. 没有使用static修饰的属性
  2. 随着对象的创建而创建,存储在对象上,每个对象独立拥有实例属性
  3. 实例属性只能通过“对象.实例属性”调用

方法

类方法

  1. 使用static修饰的属性是静态方法,也是类方法
  2. 类方法是在类加载的时候加载的,存储在类上,所有对象公用一个类方法
  3. 类方法可以通过“类.类方法”或“对象.类方法”的方式调用
  4. 类方法中只能调用类方法或类属性,不能调用实例方法和实例属性

实例方法

重载

  1. 相同方法名, 不同参数列表构成重载
重载的特点
  1. 参数列表必须不同
  2. 权限修饰符可以不同
  3. 返回值类型可以不同
重载参数列表详解
  1. 重载参数中可以用...来接受剩余所有参数
  2. 当存在具体个数的参数和...参数两个方法时,优先命中写明具体参数个数的方法
  3. ...和数组视作相同的参数形式

重写

  1. 对父类的方法进行重写
  2. 子类重写父类方法,必须在父类范围内重写
  3. 父类中private的方法不可能被重写,因为private子类是没有权限获取到的
重写的要求
  1. 权限修饰符只能不变或放大,但是有个特例,private不能被重写
  2. 返回值类型必须被包含在原有返回值类型里 2.1 如果返回值类型是类,则必须是当前类或子类 2.2 如果返回值类型是基本类型,则必须完全相同 2.3 如果返回值类型是void,则必须是void
  3. 参数列表必须一致
  4. 抛出的异常类型也必须是原有异常类型或其子类

super和this

this

  1. this在实例方法,构造器中指向实例对象自己
  2. 特殊情况,this在构造器中形如this()调用,指向当前类符合当前参数的构造器
  3. this在类方法中指向当前类
this在构造器中使用详解
  1. this()表示调用当前类的构造器方法,因为构造器可以重载,所以调用的是哪个,看的是参数列表
  2. this()不可以在构造器中形成环,即A调用B,B又调用A
  3. this()必须写在首行,有this()就没有super()

super

  1. super在实例方法,构造器中指向实例对象中由父类构造器初始化的值的集合
  2. 特殊情况,super在构造器中形如suoer()调用,指向父类符合当前参数的构造器
  3. super在类方法中指向父类
super在构造器中使用详解
  1. super()表示调用父类的构造器方法,因为构造器可以重载,所以调用的是哪个,看的是参数列表
  2. super()必须写在首行,有super()就没有this()

关键字

权限修饰符

  1. public 表示所有包可见
  2. protected 表示不同包内子类可见
  3. 缺省 表示同包内可见
  4. private 只有本类内部可见

static

  1. 修饰属性、方法、代码块
  2. 表示是否是类上的属性、方法、代码块,随着类的加载而加载或执行

final

  1. 修饰类、方法、变量,表示不可修改
  2. 修饰类表示该类不可被继承
  3. 修饰方法表示该方法不可被重写
  4. 修饰变量表示该变量不可以被修改

abstract

  1. 可以用来修饰类和方法
  2. 用来修饰类表示该类不能实例化对象
  3. 用来修饰方法,表示在子类中该方法必须被重写
  4. 基于第3点,abstract不能修饰final方法和static方法,因为这两种方法不能被重写
  5. 常用于模版方法设计模式的实现

类的特性

封装

  1. 某些方法和属性可以设置成private,不允许外部访问

继承

  1. 使用extends关键词继承

继承的特点

  1. 只能继承一个父类
  2. 会继承父类除private外的所有属性和方法
  3. 如果没有显式继承父类,则默认继承java.lang.Object类

多态

父类的变量指向子类对象

多态的特点

  1. 变量只能调用父类下的属性和方法。是什么类型就只能调用什么类型下的属性和方法,其他的属性和方法就算存在也无法调用
  2. 子类可以通过重写父类方法,使得间接调用子类的方法
  3. 直接通过"对象.属性"的方式调用获取到的是父类属性值
  4. 可以通过子类重写父类方法,此时方法中获取到的属性是子类属性值