当前位置: 首页 > news >正文

Java学习笔记(三):面向对象

文章目录

  • 1.类与对象
    • 1.1 定义构造器
    • 1.2 定义成员变量
    • 1.3 定义方法
    • 1.4 static关键字
  • 2. 面向对象的三大特征:封装、继承和多态
    • 2.1 封装
    • 2.2 继承
      • 2.2.1 子类重写父类的方法
    • 2.3 多态

1.类与对象

类(class)和对象(object, 也被称为实例 instance)是 java面向对象的核心,可以把类理解成某种概念,对象理解为一个具体存在的实体。也就是说,日常说的人,其实都是人的实例,而不是人类。

定义类的简单语法:

[修饰符] class 类名
{零到多个构造器定义..零到多个成员变量...零到多个方法...
}

修饰符可以是 public、final、abstract,或者完全省略。
对一个类而言,可以包含最常见的成员:构造器、成员变量和方法。各成员之间可以互相调用。

static修饰的成员不能访问没有 static修饰的成员。

1.1 定义构造器

构造器用于构造该类的实例,Java语言通过 new关键字来调用构造器,从而返回该类的实例。
构造器是一个类创建对象的根本途径,一般系统会为一个类提供一个默认的构造器,一旦程序员为一个类提供了构造器,系统将不再提供构造器。
定义构造器的语法格式:

[修饰符] 构造器名(形参列表)
{//零条到多条可执行语句组成的构造器执行体
}

构造器既不能定义返回值类型,也不能使用 void声明构造器没有返回值。实际上,类的构造器是有返回值的,当使用 new关键字来调用构造器时,构造器返回该类的实例,即构造器的返回值类型总是当前类。

1.2 定义成员变量

成员变量(field)用于定义该类或该类的实例所包含的状态数据。
定义成员变量的语法格式:

[修饰符] 类型 成员变量[=默认值];

修饰符可以省略,也可以是 public、protected、private、static、final,public、protected、private三者最多只能出现一个,与 static、final 共同组合修饰成员变量。

1.3 定义方法

定义方法的语法格式:

[修饰符] 方法返回值类型 方法名(形参列表){// 由零条或多条可执行语句组成的方法体
}

修饰符可以省略,也可以是 public、protected、private、static、final、 abstract。

1.4 static关键字

static英文直译是静态的意思,其真正的作用就是用于区分成员变量、方法、内部类、初始化块这四种成员到底属于类本身,还是属于实例。如果有 static修饰的成员就属于类本身,没有 static修饰的成员属于该类的实例。

2. 面向对象的三大特征:封装、继承和多态

2.1 封装

封装 (Encapsulation)是指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。

2.2 继承

继承是实现软件复用的重要手段,Java 的继承具有单继承的特点,每隔子类只有一个直接父类。

Java的继承通过 extends关键字来实现,实现继承的类被称为子类,被继承的类被称为父类,有时也被叫做基类或超类。

2.2.1 子类重写父类的方法

子类扩展了父类,子类是一个特殊的父类。

大多数时候,子类总是以父类为基础,额外增加新的成员变量和方法,但是有时候子类也需要重写父类的方法。例如鸟类都能飞,但是鸵鸟不能飞,鸵鸟子类就需要重写鸟父类的 fly()方法。
这种子类包含与父类同名方法的现象叫做方法重写(Override),也被称为方法覆盖。

重写遵循的原则: “两用两小一大”。

“两同”: 方法名相同、形参列表相同。
“两小”: 子类方法的返回值类型应比父类方法返回值类型更小或者相等,子类方法声明抛出的异常类应比父类方法声明的异常更小或者相等。
“一大”: 子类方法的方法权限比父类方法权限更大或者相等

2.3 多态

Java 引用变量有两个类型,一个是编译时类型,一个是运行时类型。编译时类型由声明该变量时用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现所谓的多态(Polymorohism)。

编写 java代码时,引用变量只能调用声明该变量时的所用类里包含的方法,例如通过 Object p = new Person() 代码定义了一个变量p,则这个 p只能调用 Object 类的方法,而不能调用运行时类型所定义的成员变量。

http://www.lryc.cn/news/132796.html

相关文章:

  • 电商项目part02 电商后台多数据源
  • 【C# 基础精讲】LINQ 基础
  • ChatGPT成为工作工具,具体都应用在哪些地方?
  • Shader学习(三)(片元着色器)
  • 谷歌推出首款量子弹性 FIDO2 安全密钥
  • 前端常用的三种加密方式(MD5、base64、sha.js)
  • alpine镜像时区设置
  • Java导入Excel,保留日期格式为文本格式
  • uploadifive php上传进度条插件 解决动态传参数问题
  • Lombok生成的Getter和Setter的名称对于“eMail”或“xAxis”等属性存在大小写转换异常
  • Redis基础概念和数据类型详解
  • C语言之extern “C“详解与使用方法
  • C++中的运算符总结(4):逻辑运算符(下)
  • CloudQuery实战 | 谁说没有一款一体化数据库操作管控云平台了?
  • 如何编写一个通用的函数?
  • uni-app封装api请求
  • 深度学习从入门到实际项目资料汇总
  • 单元测试到底是什么?应该怎么做?
  • JavaWeb-Listener监听器
  • js数组常用的方法(总结)
  • Linux:shell脚本:基础使用(5)《正则表达式-sed工具》
  • 关于ubuntu下面安装cuda不对应版本的pyTorch
  • 【SA8295P 源码分析】26 - QNX Ethernet MAC 驱动 之 emac_rx_thread_handler 数据接收线程 源码分析
  • 70 # 协商缓存的配置:通过修改时间
  • 适合程序员的DB性能测试工具 JMeter
  • java实现人物关系抽取
  • Docker网络与资源控制
  • 图片怎么转换成pdf格式?可以试试这样转换
  • [国产MCU]-W801开发实例-GPIO输入与中断
  • Layui列表表头去掉复选框改为选择