MENU

Java_学习记录_类和对象

January 14, 2021 • Java

类和对象关系

  • 类如同设计图纸,对象则是按照图纸设计出的房子,根据一张图纸可以盖出N个房子
  • 对象必须经过初始化之后才能使用
  • class关键字后面跟类名,首字母通常大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,如MyFirstJavaClass
  • 类中各个数据项叫做属性

重载

  • 同一个类中如果有2个或2个以上的方法,他们的方法名相同,参数不同,则他们构成一种关系叫重载
  • 何为参数不同?

    • 参数个数不同
    • 参数类型不同
    • 个数和类型相同,但顺序不同
  • 返回值和参数名称不同不是重载关系判断依据。

构造方法

  • 与类同名且没有返回值类型的方法
  • 作用是在创建对象时,初始化对象的内部状态,即为对象的各个属性设置初始值
  • 一个类中如果没有定义构造方法,则虚拟机会自动给这个类添加一个无参数的空构造方法,反之,则不添加。
  • 构造方法也可以重载
  • 可以在一个构造方法内部调用另一个构造方法,便于代码复用

this关键字

  • 含义:本对象自己的...
  • 三种使用方式

    • this.属性——本对象自己的属性
    • this.方法名(参数)——本对象自己的方法
    • this(参数)——本对象自己的构造方法
  • 使用this()调用本对象时切记

    • 只能在构造方法中使用
    • 必须放在首行
    • 只能用一次

继承extends

  • extends后只能跟一个父类
  • 子类构造方法执行时,首先会调用父类的构造方法
  • 如果子类没有手动调用父类的构造方法,则虚拟机会自动调用父类的无参数构造方法
  • 子类仅能在自己的构造函数中以super关键字调用父类构造函数,且必须放在首行,普通方法中不能调用
  • 当父类有了有参数的构造方法,并且没有定义无参数的构造方法,在这种情况下,子类必须要定义自己的构造方法,并在构造方法中调用父类的构造方法
  • 子类无法访问父类的private字段或者private方法
  • 子类不会继承任何父类的构造方法。子类默认的构造方法是编译器自动生成的,不是继承的。
  • 从Java 15开始,允许使用sealed修饰class,并通过permits明确写出能够从该class继承的子类名称。

    public sealed class Shape permits Rect, Circle, Triangle {
     ...
    }

super关键字

  • super(参数)——调用父类的构造方法
  • super.方法(参数)——调用被子类覆盖的方法
  • super.属性——调用被子类覆盖的属性

final关键字

  • 加在变量前或属性前——使变量或属性只能被赋值一次
  • 加在方法前——阻止子类覆盖该方法
  • 加在类前——阻止类的继承

static关键字

  • 意为“静态”

    • 技术层面——内存共享
    • 逻辑意义——与具体对象无关
  • 可以修饰属性、普通方法和块,但不能修饰构造方法
  • 修饰某个属性时,该类所有对象的这个属性共用同一块内存空间,并且这块空间是在类加载时分配的
  • 静态属性和静态方法都可以直接通过类名调用,也可以引用调用,建议是类名调用更符合逻辑意义
  • 静态方法和静态块中不能调用非静态属性和方法,也不能出现this、super等关键字
  • 静态块中的代码时类加载时创建的

    • 第一次创建这个类的对象时,首先是加载这个类,然后再执行他的构造方法
    • 当某个类是其他类的的子类时,加载顺序是:

    父类加载→本类加载→父类构造方法→本类构造方法

  • 引用指向null时,不影响静态属性和静态方法的调用

包的使用

  • 包是类的容器,通常将功能和意义相似的类放入同一容器
  • 一个类在首行通过pakage关键字申明所在的包
  • 当某个类要调用其他包下的类时要注意

    • 使用全名,即包名.类名的方式
    • 使用Import关键字引入包下的某个类或全部类
    • Import.*只能引入该包下的类,不能引入子包下的类
    • 当遇到两个或多个同名类时候,就用全名
    • java.lang的包已默认全部使用

访问修饰符

  • default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
  • private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
  • public : 对所有类可见。使用对象:类、接口、变量、方法
  • protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。

抽象类和抽象方法

抽象方法:只有方法申明,但是没有具体实际过程的方法

抽象类:包含抽象方法的类

  • 只要类中有抽象方法(继承,自定义),该类就必须申明为抽象类
  • 抽象类可以有构造方法,但是不能创建对象
  • 抽象类可以有普通方法,甚至可以没有抽象方法
  • 构造方法和静态方法都不能定义为抽象方法
  • 抽象类通常作为父类出现

抽象方法的意义是父类给子类某种行为定义的规范和标准

什么情况下把方法定义为抽象方法

  • 自身能否写出这个方法?
  • 子类能否写出这个方法?

接口

  • 接口可以理解为另外的一种类

    • 属性自带public static final
    • 方法自带public abstract
    • 一个类可以实现多个接口,并不影响这个类继承其他类
  • 接口也可以有继承关系,一个接口可以有多个父接口
  • 一个类实现接口后,如果没有实现接口类的抽象方法,该类必须申明为抽象类
  • 能用接口情况下不用抽象类
转载请注明出处,并添加原文地址

Archives QR Code Tip
QR Code for this page
Tipping QR Code