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

【Java SE】类与对象

现实世界中,随处可见的一个事物实体就是对象,而类就是同一类事物(或对象)的统称,由一个类构造对象的过程称为创建这个类的一个实例(instance),即:

  • 类(class):类是一个模板,它描述一类对象的行为和状态,如狗类
  • 对象(object):类的一个实例,有状态和行为,如一只小狗

在面向对象程序设计(Object-Oriented Programming,OOP)中有三个重要的特性,分别是:

  • 封装性
  • 继承性
  • 多态性

一、封装性

Java中,封装是处理对象的一个重要概念。类是封装对象的属性和行为的载体,类中的对象行为是以方法的形式定义的,对象的属性是以成员变量的形式定义的。

// 具体实例
class Book {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}
}Book book = new Book();
book.setName("a book!");
System.out.println(book.getName());

二、继承性

继承,顾名思义,就是子类继承父类的特征和行为,使得子类对象(实例)具有父类(超类)的实例域和方法。有一个简单的规则可以判断是否将数据设计为继承关系,这个规则是is-a,含义是子类的每个对象也是父类的对象。即父类更通用,子类更具体。在Java中,继承机制通过extends关键字申明一个类继承了另一个类,且Java类只支持单继承,不支持多继承,其一般形式如下:

class Parent {
}class Child extends Parent {
}

注意:在设计程序时,有时可能希望阻止其他人定义某个类的子类,这时候可以在类定义时使用final修饰符,将类设计成final类,意为该类不允许扩展。即public final class Example{...}。另外,也可以只将类中的某个特定方法声明为final,这样所有子类都不能覆盖这个方法(final类中所有方法自动成为final方法)。

三、多态性

多态是同一个行为具有多个不同表现形式或形态的能力。进一步描述,多态本质是同一个接口,使用不同的实例而执行不同操作。多态存在的三个必要条件:

  • 存在继承关系
  • 方法重写/覆盖
  • 父类引用指向子类对象

// 多态实例// 第一必要条件:存在继承关系
abstract class Animal {  abstract void eat();  
}  class Cat extends Animal { // 第二必要条件:方法重写/覆盖public void eat() {  System.out.println("Eat fish.");  } 
}  class Dog extends Animal {  // 第二必要条件:方法重写/覆盖public void eat() {  System.out.println("Eat bone.");  }  
}// 第三必要条件:父类引用指向子类对象
public class Main {public static void main(String[] args) {Animal Animal = new Dog();Animal.eat(); // Output:Eat bone.Animal = new Cat();Animal.eat(); // Output:Eat fish.}
}
http://www.lryc.cn/news/480909.html

相关文章:

  • 基于springboot的公益服务平台的设计与实现
  • Tomcat(6) 什么是Servlet容器?
  • 用js去除变量里的html标签
  • Vue3+element-plus摘要
  • Android Studio 将项目打包成apk文件
  • 贪心算法day2(最长递增子序列)
  • arcgis pro 学习笔记
  • OpenGL 进阶系列06 - OpenGL变换反馈(TransformFeedback)
  • elementUI 点击弹出时间 date-picker
  • 【浙江大学大模型系列】启真医疗大模型(国内大模型)
  • NestJS 项目中如何使用 class-validator 进行数据验证
  • 【AI抠图整合包及教程】Meta SAM2:引领图像和视频分割技术的新纪元
  • 小菜家教平台(三):基于SpringBoot+Vue打造一站式学习管理系统
  • ArcGIS/QGIS按掩膜提取或栅格裁剪后栅格数据的值为什么变了?
  • Linux的基本指令(一)
  • python导入包失败 in <module> import pandas as pd
  • 不惧风雨,硬核防护!雷孜LaCie小金刚三防移动硬盘颠覆认知
  • Yocto 项目下通过网络更新内核、设备树及模块
  • Scheduled Sampling工作原理【小白记笔记】
  • C++:C++的IO流
  • 「QT」几何数据类 之 QLine 整型直线类
  • day58 图论章节刷题Part09(dijkstra(堆优化版)、Bellman_ford 算法)
  • 【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】试卷(1)
  • 智能出行助手:SpringBoot共享汽车管理平台
  • 【月之暗面kimi-注册/登录安全分析报告】
  • Flink实现实时数据处理
  • 11.9.2024刷华为
  • Chromium 中chrome.system.storage扩展接口定义c++
  • 【Qt聊天室客户端】登录窗口
  • 如何显示模型特征权重占比图【数据分析】