首页 > 其他分享 >封装、继承、重写和多态

封装、继承、重写和多态

时间:2024-08-26 08:55:57浏览次数:5  
标签:封装 子类 多态 方法 父类 重写 public

面对对象的编程 (OOP:Object-oriented programming)

属性 + 方法 = 类

以类的方式组织代码,以对象封装数据

  • 封装
  • 继承
  • 多态

类是对象的模板

同一包内class文件内容可以相互调用,而不用import

一个文件内可以有多个class类,但只有有一个public类

创建对象

一个程序只有一个主启动(main方法),可以改名启动类

类实例化后会返回一个自己类的具体实例

Student xiaoming = new Student();

new方法的本质是在调用构造方法

构造器

构造方法(函数)

  • 即使不写也会自动生成无参构造

  • 一旦定义了有参构造,无参构造就必须显示定义

  • 构造函数名与类名相同

  • 有参构造和无参构造 重载

alt + insert 默认生成有参构造器

  • 出现窗口后点击Constructer

  • 第一个选项即是当前的有参构造器

  • 最下部的第二个选线Select None是生成无参构造器

封装

封装大多数是针对属性

private 不能直接操作私有变量

要提供public的get、set方法间接操作

art + insert 自动生成 get和set 方法

使用set时可以进行一些合法性的检查

  • 提高程序安全性,保护数据
  • 隐藏代码实现细节
  • 统一结构
  • 提高系统可维护性

继承

public class 类名 extends 父类{}

继承:extends:扩展

  • public:子类继承父类就会有父类的全部public方法

  • private方法:子类不能继承

  • 在Java中所有的类都直接或间接的继承object类

  • Java 中只有单继承,没有多继承,最多只有一个父类

ctr + H 可看到继承关系

super	父类:只有在继承条件下才能使用
this	自身

当子类属性和父类属性或方法 名相同,可用super和this区分使用

子类调用构造方法时会隐形调用父类的构造器(super();父类构造器必须在子类构造器的第一行)

super();	//调用父类的构造器
this();	//调用本

注:

  • private 成员对子类不可见,子类无法直接继承或使用父类的 private 成员。

    子类可以通过父类提供的公共或受保护的方法,间接访问或操作父类的 private 成员。

    继承只发生在 protectedpublic 和包级访问权限(不使用任何访问修饰符)的成员上。

  • 在 Java 中,当你将数组作为参数传递给构造函数时,必须使用 new 关键字来显式地创建数组。这是因为 Java 的语法不允许直接传递类似 {1, 2, 3} 这样的数组初始化表达式

    简化的数组初始化语法仅在数组声明并初始化时可用。

  • 子类可以像父类一样只定义有参构造函数而没有无参构造函数。但是,当父类没有无参构造函数时,子类的构造函数必须显式调用父类的有参构造函数,否则编译会报错。


重写

重写都是方法的重写,与属性无关,只与非静态的public方法有关

父类的引用可以指向子类,但不能调用子类独有的方法

因为子类是父类的扩展,父类有的子类有,子类有的父类不一定有

静态方法和非静态的方法区别很大

静态方法:方法的调用只与定义的左侧有关

非静态的方法:子类重写(更改)了父类的方法,执行子类的方法

  • 方法名相同
  • 参数列表相同
  • 修饰符:范围可以扩大,private可以变为public,但是public不能变成protected
  • 抛出的异常:可以被缩小,但是不能扩大

重写:子类的方法必须和父类一致,但是方法体不同

重写的原因

  • 父类的功能,子类不需要
    @Override	//不写没错,但是建议写,其标签作用
    public void test(int ... i) {
    
    }

一个对象的实际类型是确定的

父类的引用可以指向子类的类型

Student s1 = new Student();
Person s2 = new Student();

多态

  • 多态是方法的多态,不是属性的多态
  • 父类和子类之间才有多态 ClassCastException;
    • static和final无法重写
    • private是私有方法,无法重写

标签:封装,子类,多态,方法,父类,重写,public
From: https://www.cnblogs.com/LiuYP-blog/p/18379970

相关文章

  • C++多态——虚函数
    其实在学习的时候,一直没有搞懂为什么要用虚函数,为什么需要传递基类的引用或者指针,要用谁的时候写谁不就好了。其实这时候我的思维还局限在面向过程编程,不是面向对象编程。现在搞明白了,因为多态,利用继承的思想,减少代码复用。我们来看下面的例子。#include<iostream>usingnamesp......
  • C++调用Python和numpy第三方库计算MFCC音频特征实现封装发布
    目录项目简介程序/数据集下载环境准备执行步骤1.新建python虚拟环境2.虚拟环境运行下python代码3.迁移虚拟环境4.编写Cmakelists.txt5.编写C++代码6.编译项目7.测试项目简介深度学习程序的边缘部署以性能绝佳的C++为主(⊙﹏⊙),但遇到项目开发周期短,则以功能优先,一些复杂的算法和......
  • Superset BI封装自定义组件(堆叠柱状图)
    目录前言封装步骤一、创建组件文件夹二、预设组件信息三、使用组件往期回顾前言Superset是一个现代化的、易于使用的、轻量级的数据可视化工具,它允许用户通过简单的点击操作来创建和分享图表。如果你想在Superset中创建自定义组件,你可能需要进行一些扩展工作。......
  • C# 使用特性的方式封装报文
    在编写上位机软件时,需要经常处理命令拼接与其他设备进行通信,通常对不同的命令封装成不同的方法,扩展稍许麻烦。本次拟以特性方式实现,以兼顾维护性与扩展性。思想一种命令对应一个类,其类中的各个属性对应各个命令段,通过特性的方式,实现其在这包数据命令中的位置、大端或小端及......
  • 虚函数返回自己类型指针或引用,重写时返回类型可以不一样
    C++#include<functional>#include<iostream>#include<vector>#include<memory>#include<set>#include<map>#include<string>usingnamespacestd;namespace{/*C++类不能继承它自己*/classAnimal/*:public......
  • WPF 模拟UWP原生窗口样式——亚克力|云母材质、自定义标题栏样式、原生DWM动画 (附我封
    先看一下最终效果,左图为使用亚克力材质并添加组合颜色的效果;右图为MicaAlt材质的效果。两者都自定义了标题栏并且最大限度地保留了DWM提供的原生窗口效果(最大化最小化、关闭出现的动画、窗口阴影、拖拽布局器等)。接下来把各部分的实现一个个拆开来讲讲。一、使用窗口材质特......
  • Java多态
    1.多态1.1多态的概述(记忆)什么是多态不同类的对象在调用同一个方法时表现出来的多种不同行为多态的前提要有继承或实现关系要有方法的重写要有父类引用指向子类对象代码演示classAnimal{  publicvoideat(){    System.out.println("动物吃肉")......
  • WPF 设备输入事件封装
    本文主要介绍WPF应用对鼠标输入、触摸屏触笔以及触摸事件的封装之前有简单说明设备输入类型 WPF屏幕点击的设备类型-唐宋元明清2188-博客园(cnblogs.com)1、鼠标- 通过Mouse相关的事件参数MouseButtonEventArgs中的数据,e.StylusDecice==null表示没有触摸设备,所以设备为......
  • el-tree封装。可以搜索/下拉/高亮/能操作增删改查
    项目场景:     el-tree树形图组写成一个组件,并控制默认高亮问题描述     el-tree树形图组写成一个组件,并控制默认高亮。上边存在搜索框和下拉框。能添加和删除解决方案:组件代码:<template><divclass="grid-contentbg-purple"><!--标题--><......
  • CRTP 和静态多态
    c++古典面试问题之一:面向对象编程三大特性--封装,继承,多态c++古典面试问题之二:如何实现多态--当基类指针指向派生类对象,并通过这个指针调用在派生类中被重写的虚函数  基于上述知识点,今天我们讲下另一种多态实现方式:CRTP(curiouslyrecurringtemplatepattern)  虚函......