文章标题

来源:互联网 发布:最好的游戏优化软件 编辑:程序博客网 时间:2024/05/21 21:45

面向对象

  • 一种抽象的编程模型
  • 将复杂问题分解成一个一个独立小问题,
    通过一个一个解决这些小问题,
    来解决大问题


    对象(实例)
    引用
    构造方法
    this
    方法重载

    继承
    super
    多态
    instanceof

    抽象类
    final
    static
    接口

    内部类

  • 可以理解成 “图纸”
  • 是对事物、逻辑、算法、概念的抽象

  • 将相关的数据、方法,进行封装,
    封装成一个独立的程序组件

对象(实例)

  • 可以理解成:从图纸生产出的产品
  • 从类创建出的具体实例

  • 每个对象都是独立的,

  • 每个对象新建时,都会分配新的内存空间,
    来保存各自的属性变量值

引用

  • 可以理解成: 遥控器
  • 引用变量,保存一个对象的内存地址
  • 使用引用变量,
    可以找到内存中的一个对象,
    访问对象的属性值,
    或控制这个对象来执行指定的方法

  • 引用变量的特殊值: null(空)

构造方法

  • 在新建实例时,执行的一个特殊方法

    new Soldier();new Soldier(9527);new Light();new Light(Color.WHITE);
  • 作用:
    *) 不知道
    *) 构造方法中可以自己编写任何代码
    *) 常见写法:初始化成员变量

  • 一个类必须有构造方法

  • 不定义构造方法,编译器会添加默认构造方法

    public class A {    //public A() {    //}}
  • 允许定义不同参数的多个构造方法

    public class A {    public A() {    }    public A(int i) {    }    public A(int i, String s) {    }}

练习图例:
这里写图片描述
这里写图片描述

this

  • 用来引用成员

    this.name*) this表示当前对象,   用哪个对象调用,哪个对象就是当前对象*) 本质是一个特殊引用,   保存当前对象的内存地址
  • 构造方法之间调用

    this(...)*) 目的: 减少代码重复*) 一般从参数少的构造方法,调用参数多的构造方法      参数的处理,集中在参数最多的构造方法中,      其他构造方法,调用这个构造方法的代码*) 构造方法之间调用,必须是首行代码

方法重载

  • 同名不同参

继承

  • 作用: 代码重用、代码复用
  • 子类继承父类
  • 单继承

    *) 一个类,只能继承一个父类
    *) 一个父类,可以有多个子类

  • 继承了:
    *) 可见的成员

  • 不继承:
    *) 不可见的成员
    *) 构造方法
    *) 静态方法

  • 创建子类对象
    Student s = new Student();

    1) 新建父类对象,执行父类构造方法2) 新建子类对象,执行子类构造方法*) 两个对象绑定在一起,   作为一个子类对象
  • 创建子类对象,构造方法执行过程
    Student s = new Student();

    1) 先执行父类构造方法      *) 默认执行无参构造            super();//隐含代码      *) 也可以手动调用父类构造方法            在子类构造方法中添加:            super(参数...);2) 再执行子类构造方法*) 如果父类没有无参构造方法,   必须手动调用父类有参构造方法*) 手动调用父类构造方法,   根据需要,可以选择任意的构造方法来调用
  • 通过子类对象,调用成员
    s.xxx
    s.xxx()

    1) 先在子类对象中查找这个成员
    2) 再在父类对象中查找这个成员

    *) 子类有,执行子类的;
    子类没有,执行父类的。

  • 方法重写 Override

    *) 从父类继承的方法,不满足子类需要
    可以在子类中重新编写这个方法
    *) 可以用 super.xxx(),调用父类中的同一个方法

    *) 方法签名(方法名、参数列表)必须与父类一致
    *) 返回类型允许使用更小的类型
    *) 访问范围不能降低
    *) 抛出的异常不能更多

    super


    • 重写方法时,调用父类同一个方法

      public String toString() {

      super.toString()

      }

    • 手动调用父类构造方法

      super(); //默认
      super(参数…); //手动调用

      *) 必须是首行代码
      练习图例:
      这里写图片描述
      这里写图片描述

多态

  • 作用: 一致的类型

  • 类型转换

    *) 向上转型
    子类对象转为父类型

          *) 转型之后,只能调用父类中定义的通用成员

    *) 向下转型
    已经转为父类型的子类对象,
    再转回成子类型

  • instanceof

    运行期类型识别
    对真实类型及其父类型判断,都得到 true

    Shape s = new Line();

    s instanceof Line true
    s instanceof Shape true
    练习图例:
    这里写图片描述
    这里写图片描述
    这里写图片描述

抽象类

  • 作用:
    *) 通用代码
    *) 通用方法定义

  • 抽象类不能创建对象

  • 有抽象方法的类,必须是抽象类

  • 抽象类中,不一定有抽象方法

final

  • 可以修饰类、方法、变量

    变量


    • 变量的值不可变,称为“常量”

      final int a = 10;
      a = 11; //错,a变量不能被重新赋值


      final Point a = new Point(3,7);
      a.x = 30;//对,被引用的对象的属性可变
      a = new Point(6,5);//错,a变量不能被重新赋值

    • 方法

      不能被子类重写

    • 没有子类

static

  • 静态
  • 静态成员属于类,而不属于对象

  • 静态成员应该用类名来调用(避免被误解)

  • 静态方法中,不能调用非静态成员

  • 什么时候使用 static?

    *) 使用原则:能不用就不用    静态是“非面向对象”语法*) 使用场景:      *) 共享的数据      *) 常量            static final PI = 3.14;            Integer.MAX_VALUE      *) 工具方法            Integer.parseInt()            String.valueOf()            Math.sqrt()

    练习图例:、
    这里写图片描述
    这里写图片描述
    这里写图片描述
    练习图例2:
    这里写图片描述
    这里写图片描述

0 0
原创粉丝点击