Java复习_第5章、面向对象(上)

第5章、面向对象(上)

  • 命名规则

    • 都要由有意义的单词组成
      • 类名,每个单词的首字母大写 (Student
      • 成员变量名,首单词字母小写,每个单词首字母大写(phoneNumber
      • 方法名,首单词字母小写,动词开头 (goOut
  • static关键字

    • 修饰的是类属成员变量和方法,是类共有的,通过类进行调用。
      • 特别是静态成员变量,是类属的,所有对象共享的(不建议对象调用静态变量和方法)
      • 因此,规范:使用类名去调用类属方法与变量
    • 否则就是对象所有的(称为实例变量、实例方法)
    • 因此,静态方法不能直接调用或访问非静态成员
    • static本质作用是区分 变量、方法是属于类还是属于实例对象的
  • Person p = new Person()

    • 实际上p是一个指针变量(也称引用变量),保存着实际对象的地址
    • p变量存在栈内存,对象存在堆内存
    • 只能通过指针p来访问对象
    • 当没有任何指针变量指向 堆内存中的对象 时,该对象会被JVM的回收机制回收
    • 因此,如果想销毁某对象,只需要将指向他的指针变量置null即可
  • this

    • 哪个对象在调用该方法,this就代表哪个对象
    • 一个成员函数调用另一个成员函数太过普遍,因此此时this可省略
    • static的方法不能使用this
    • 可使用this做返回值 ,返回对象本身
  • 方法

    • 在面向结构的编程语言中,函数是基本单位
    • 但在Java中,类才是。因此方法不能独立存在,只能属于类当中
    • java中,参数传递的只有值。传入对象时,传递的是指针
  • 参数个数可变的方法

    • public void test(int a, String… books){

for( String tmp :books){
sout(tmp);
}
}

  • 此时可以传入多个book

  • 访问控制符

    • private    只能在当前类内部被访问
    • default    默认,包访问权限,可以被相同包下的其他类访问
    • protected    子类访问权限,不仅可以被相同包下的其他类访问,还可以被不同包中的子类访问
      • 用于那种:仅希望被子类重写,而不想被外界直接调用的方法
    • public    公共访问权限
  • package

    • 提供了类的多层次命名空间,用于解决类的命名冲突、类文件管理等
    • 将同一组功能相关的类放在同一包下,形成逻辑上的类库单元
    • 包结构
      • cn.ac.iie.cloud等
      • kensin.projectname
  • import

    扫描二维码关注公众号,回复: 13008430 查看本文章
    • import package 导包后,调用某个类就不用加包名前缀了
    • import static 某类 ,导入后,可以直接调用那个类当中的静态变量与方法,可省略类名
  • 构造器

    • 可以使用this()在一个重载的构造器中调用另一个构造器,但必须作为构造器执行体的第一条语句
  • 类的继承

    • extends 意为拓展的意思,即子类是父类的拓展,但确实也继承得到了父类的成员
    • java类只能有一个直接父类,但却可以有无限多个简介父类
    • 所有的类都默认继承自java.lang.Object
    • 子类可以可以重写覆盖父类当中的方法,如果调用父类中被子类覆盖的方法:super.即可
    • super用于调用子类继承自父类的成员变量与方法
    • 重载是在同一个类当中的同名方法,重写是子类重写父类当中的同名方法
    • 在子类的构造器中,可显式调用父类的构造器 super( , )
    • 父类的构造器总是在子类的构造器之前执行
  • 多态

    • 相同类型的变量,在调用同一个方法时呈现出多种不同的行为特征,这就是多态
    • 例如基类是打印机printer
      • Printer p1=new CaisePrinter
      • Printer p2=new HeibaiPrinter
      • 此时调用p1,p2的打印方法,打印出来不同的效果,即多态
    • instanceof 判断前面的对象是否是后面的类,或者其子类、实例类的实例
      • 一般在强转之前,判断是否可以成功转换,以避免ClassCastException
  • 继承与组合

    • 封装:类应当封装他的内部信息和实现细节,而只暴露必要的方法给其他类使用。(低耦合)

    • 但继承会破坏父类的封装性,甚至都可以重写父类的方法,导致子类与父类严重耦合

    • 设计父类的原则:

      • 尽量隐藏父类的内部数据。尽量设置为private,不让子类访问。
      • 不要让子类随意访问修改父类的方法。
        • 父类当中的辅助方法,要用private,防止子类重写。
        • 父类当中的方法需要供外部调用的,又不希望子类修改的,用final修饰
        • 父类当中的方法希望子类重写,但不希望被其他类访问,用protected
        • 尽量不要在父类的构造器当中调用将要被子类重写的方法
    • 何时需要派生新的子类呢?

      • 子类需要额外增加属性,不仅仅是属性值的改变
      • 子类需要增加自己独特的行为方式
    • 组合:把旧类对象作为新类的成员变量组合进来,用以实现新类的方法

      • 通常用private修饰旧类对象,因为希望用户看到的是新类的方法
      • Person类需要复用Arm类的方法,便可以将arm作为Person的成员变量
      • 组合和继承的系统开销没有本质差别
  • 初始化块

    • 普通初始化块,static初始化块(对整个类的类变量进行初始化操作)
    • 执行顺序:初始化块-> 构造函数-> 成员变量赋值

猜你喜欢

转载自blog.csdn.net/xiaohaigary/article/details/108848546
今日推荐