面向对象的特征

封装、继承和多态。

访问修饰符范围
private类内
default包内
protected包内,非同包子类
public公共的
  1. 封装

    封装是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问到对象内部信息,通过该类中的方法对内部信息进行操作和访问。

  2. 继承

    继承是在原有类的基础上创建一个新类,用extends实现,从而达到代码复用的目的。

    方法覆盖:当父类方法不能满足子类需要时,子类可以重写父类方法

    1.方法重写

    子类扩展完父类,为满足自身需要,对父类行为或方法进行覆盖,换句话说就是子类包含与父类同名方法的现象

    /*什么时候我们会考虑使用方法覆盖呢?子类继承父类之后,当继承过来的方法无法满足当前子类的业务需求时,子类有权利对这个方法进行重新编写,有必要进行"方法的覆盖"重要结论:当子类对父类继承过来的方法进行"方法覆盖"之后,子类对象调用该方法的时候,一定执行覆盖之后的方法方法重写只存在于继承关系中;
    ​
    方法重写时子类、父类的方法名相同,参数列表也相同(同名同参);
    ​
    子类方法的返回值类型与父类相同(return),或者子类返回值类型是父类返回值类型的子类(public Son Study(){});
    ​
    子类方法抛出异常<父类方法抛出异常;(父类子类没有异常,父类抛出异常,程序正常运行父类子类没有异常,子类抛出异常,程序报错:)
    ​
    子类方法的访问权限>=父类方法的访问权限;(**父类方法private除外子类不能访问,更无法重写**)(父类原先是public,不能低于public。父类原先是protected,子类可以是public)
    ​
    (**满足以上五点不一定是方法重写**,如子类和父类刚好有相同方法或者private修饰父类方法,即使子类写的相同也相当于写了一个新方法,但是如果子类的方法名、参数、访问权限、异常都相同,只有返回值类型不同编译会不通过)注意1:方法覆盖只是针对于方法,和属性无关注意2:私有方法无法覆盖注意3:构造方法不能被继承,所以构造方法也不能被覆盖.注意4:方法覆盖只是针对于实例方法,静态方法覆盖没有意义.
    */
    ​
    //方法覆盖比较经典的案例
    //一定要注意:方法覆盖/重写的时候,建议将父类的方法复制粘贴,这样比较保险
    ​class People{//属性private String name;//构造public People(){}public People(String name){this.name = name;}//setter and getterpublic void setName(String name){this.name = name;}public String getName(){return name;}//人都会说话public void speak(){System.out.println(name + "....");}
    }
    ​
    //中国人
    class Chinese extends People{//中国人说汉语//所以子类需要对父类的speak()方法进行重写public void speak(){System.out.println(this.getName() + "正在说汉语");}
    }
    ​
    //美国人
    class American extends People{//美国人说英语//所以子类需要对父类的speak()方法进行重写public void speak(){System.out.println(this.getName() + "speak english!");}
    }
    ​
    public class OverrideTest03{public static void main(String[] args){//创建中国人对象// Chinese p1 = new Chinese("张三");//错误原因:没有这样的构造方法Chinese p1 = new Chinese();p1.setName("张三");p1.speak();//张三正在说汉语
    ​//创建美国人对象// American p2 = new American("jack");//错误原因:没有这样的构造方法American p2 = new American();p2.setName("jack");p2.speak();//jack speak english!}
    }
    2.方法重载(类方法也行)

    定义(3点):同类中、方法名相同、参数列表不同(个数、类型)

    特征(三无关一有关):访问修饰符(可以不同)、方法返回值(不同也可以)、抛出异常无关,参数列表有关

    /*
    什么时候考虑使用方法重载overload?当在一个类当中,如果功能相似的话,建议将名字定义的一样,这样代码美           观,并且方便编程
    什么条件满足之后能够构成方法重载overload?条件一:在同一个类当中条件二:方法名相同条件三:参数列表不同(个数、顺序、类型)
    */
    ​
    public class MethodDemo03 {public static void main(String[] args) {// 下面是针对求和方法的调用int sum1 = add(1, 2);int sum2 = add(1, 2, 3);double sum3 = add(1.2, 2.3);// 下面的代码是打印求和的结果System.out.println("sum1=" + sum1);System.out.println("sum2=" + sum2);System.out.println("sum3=" + sum3);}
    ​// 下面的方法实现了两个整数相加public static int add(int x, int y) {return x + y;}// 下面的方法实现了三个整数相加public static int add(int x, int y, int z) {return x + y + z;}// 下面的方法实现了两个小数相加public static double add(double x, double y) {return x + y;}
    }

  3. 多态

多态是对象的相同的数据类型,使用同一种方法时呈现出的不同状态特征,当

[编译时类型]  是由声明该变量时使用的类型所决定 

不等于

[运行时类型]  是由该变量指向的对象类型决定 

时,会产生多态。

简单的来说就是父类引用指向子类对象或者是接口引用指向实现类对象 在调用方法和属性的时候 实际上调用的就是子类的方法和父类的属性 子类对方法的重写会覆盖父类的定义 但是对属性的重新定义不会覆盖父类的定义

会将子类对象直接赋值给父类引用变量,称为向上转型,而不用进行类型转换。如 Animal a = new Bird(),其中引用变量 a 的编译时类型是 Animal,运行时类型是 Bird,两者不一致,因此出现多态。

当使用该对象引用进行调用的时候,有这么一条规则,对象调用编译时类型的属性和运行时类型的方法

/*1.多态的前提:继承+重写*/
//1.创建父类
class Animal{//3.创建父类的普通方法public void eat(){System.out.println("小动物Animal吃啥都行~");}
}
//2.1创建子类1
class Cat extends Animal{//4.1添加重写的方法@Overridepublic void eat(){System.out.println("小猫爱吃小鱼干~");}//5.1添加子类的特有功能public void jump(){System.out.println("小猫Cat跳的老高啦~");}
}
//2.2创建子类2
class Dog extends Animal{//4.2添加重写的方法@Overridepublic void eat(){System.out.println("小狗爱吃肉骨头~");}//5.2添加子类的特有功能public void run(){System.out.println("小狗Dog跑的老快啦~");}
}
​
public class TestDemo {public static void main(String[] args) {//6.创建“纯纯的”对象用于测试Animal a = new Animal();Cat c = new Cat();Dog d = new Dog();a.eat();//小动物Animal吃啥都行~调用的是父类自己的功能c.eat();//小猫爱吃小鱼干~调用的是子类重写后的功能d.eat();//小狗爱吃肉骨头~调用的是子类重写后的功能/*2.父类对象不可以使用子类的特有功能*///a.jump();//报错,Animal类里并没有这个方法//a.run();//报错,Animal类里并没有这个方法c.jump();//小猫Cat跳的老高啦~,子类可以调用自己的功能d.run();//小狗Dog跑的老快啦~,子类可以调用自己的功能
​//7.创建多态对象进行测试/*3.口诀1:父类引用指向子类对象* 解释:创建出来的子类对象的地址值,交给父类类型的引用类型变量来保存*/Animal a2 = new Cat();//Cat类对象的地址值交给父类型变量a2来保存Animal a3 = new Dog();//Dog类对象的地址值交给父类型变量a3来保存//8.测试多态对象/*4.口诀2:编译看左边,运行看右边* 解释:必须要在父类定义这个方法,才能通过编译,把多态对象看作是父类类型*      必须要在子类重写这个方法,才能满足多态,实际干活的是子类*/a2.eat();//小猫爱吃小鱼干~,多态对象使用的是父类的定义,子类的方法体}
}

采用面向对象的方法开发一个软件,生命周期当中:【整个生命周期中贯穿使用面向对象方式】

面向对象的分析:OOA

面向对象的设计:OOD

面向对象的编程:OOP

程序员的抽象能力-->将现实世界转换为代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/749432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在数据库中使用sql语言插入数据

在SQL中&#xff0c;你可以使用INSERT INTO语句来添加数据到数据库表中。以下是一个基本示例&#xff0c;说明如何向表中插入数据&#xff1a; 假设你有一个名为students的表&#xff0c;它有以下字段&#xff1a;id, name, age 和 grade。 CREATE TABLE students ( id INT P…

Leet code 179 最大数

解题思路 贪心算法 贪心算法就是走一步看一步 每一步都取当前位置的最优解 这题我们该如何贪呢&#xff1f; 我们先把int数组转换为string数组 以示例2为例 3 30 34 5 9 排序哪个在前哪个在后&#xff1f; 3 30 &#xff08;330&#xff09;> 30 3 &#xff08;30…

【Poi-tl Documentation】区块对标签显示隐藏改造

前置说明&#xff1a; <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version> </dependency>模板&#xff1a; 删除行表格测试.docx 改造前测试效果 package run.siyuan…

宠物疾病 与 光线疗法

人类与动物以及大自然是相辅相成的。人离开动物将无法生存&#xff0c;对于动物我们尽力去保护&#xff0c;与大自然和谐稳定生存发展。 生息在地球上的所有动物、在自然太阳光奇妙的作用下、生长发育。太阳光的能量使它们不断进化、繁衍种族。现在、生物能够生存、全仰仗于太…

【Python使用】python高级进阶知识md总结第4篇:静态Web服务器-命令行启动动态绑定端口号,html 的介绍【附代码文档】

python高级进阶全知识知识笔记总结完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;操作系统&#xff0c;虚拟机软件&#xff0c;Ubuntu操作系统&#xff0c;Linux内核及发行版&#xff0c;查看目录命令&#xff0c;切换目录命令&#xff0c;绝对路径和相对…

Linux 安装 Gitblit

1.下载Gitblit 官网地址&#xff1a;Gitblit&#xff0c;目前最新的是1.9.3 2.上传到服务器 ①在服务器上新建目录&#xff1a;/usr/local/gitblit ②将下载的文件上传到服务器&#xff1a;/usr/local/gitblit/gitblit-1.9.3.tar.gz ③解压文件&#xff1a; cd /usr/local…

12、MongoDB -- 通过 SpringBoot 整合 Spring Data MongoDB 操作 MongoDB 数据库(传统的同步API编程)

目录 通过 SpringBoot 整合 Spring Data MongoDB 操作 MongoDB 数据库&#xff08;传统的同步API编程&#xff09;演示前提&#xff1a;登录单机模式的 mongodb 服务器命令登录【test】数据库的 mongodb 客户端命令登录【admin】数据库的 mongodb 客户端命令 代码演示同步API编…

加速数字化金融转型,小赢卡贷创新服务中小微企业

自2013年党的十八届三中全会正式提出“发展普惠金融”以来,我国普惠金融事业取得了长足发展,但在新发展形势下,普惠金融发展仍面临诸多问题和挑战。 为构建高水平普惠金融体系,进一步推进普惠金融高质量发展,去年10月,国务院印发《关于推进普惠金融高质量发展的实施意见》,意见…

CSS样式文本

提示:本文为学习记录,若有错误,请联系作者,谦虚受教。 文章目录 前言一、CSS二、颜色总结前言 一、CSS .QWidget{border:0px solid #8FBC8F;border-radius:0px;/*background-color:#FFFFFF*/ }QWidget#MainWindow,QWidget#Widget,QWidget#frame_menu,QWidget#eeprom{back…

欧科云链:比特币现货ETF后时代,链上数据揭示真实供需关系

出品&#xff5c;欧科云链研究院 作者&#xff5c;Hedy Bi 本文于3月11日首发TechFlow深潮&#xff0c;原标题为《比特币现货ETF通过后的2个月&#xff1a;链上数据揭示BTC供不应求》。文中观点纯属笔者基于链上数据进行分析&#xff0c;不构成对任何潜在投资目标的推荐或意见…

二刷代码随想录算法训练营第二十五天 | 216.组合总和III 17.电话号码的字母组合

目录 一、216. 组合总和 III 二、17.电话号码的字母组合 一、216. 组合总和 III 题目链接&#xff1a;力扣 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;和组合问题有啥区别&#xff1f;回溯算法如何剪枝&#xff1f;| LeetCode&#xff1a;216.组合总和III 题目&…

双指针、bfs与图论

1238. 日志统计 - AcWing题库 import java.util.*;class PII implements Comparable<PII>{int x, y;public PII(int x, int y){this.x x;this.y y;}public int compareTo(PII o){return Integer.compare(x, o.x);} }public class Main{static int N 100010, D, K;st…

Wings与c++test自动单元测试

Wings与c test 参考 Wings与c test都是用于生成单元测试驱动框架的工具。两者差异在于以下几点&#xff1a; 1.基本普通类型&#xff0c;wings与c test生成用例大致相同&#xff0c;wings采用随机生成一组或者多组数值&#xff0c;而c test依据临界值生成固定的随机数。 例如…

数字电子技术实验(四)

单选题 1.组合逻辑电路中产生竞争冒险的原因是&#xff1f; A. 电路没有最简化 。 B. 时延 。 C. 电路有多个输出。 D. 逻辑门的类型不同。 答案&#xff1a;B 评语&#xff1a;10分 单选题 2.下列表达式不存在竞争冒险的有&#xff1f; 答案&#xff1a;A 评语&#x…

深度强化学习(七)策略梯度

深度强化学习(七)策略梯度 策略学习的目的是通过求解一个优化问题&#xff0c;学出最优策略函数或它的近似函数&#xff08;比如策略网络&#xff09; 一.策略网络 假设动作空间是离散的,&#xff0c;比如 A { 左 , 右 , 上 } \cal A\{左,右,上\} A{左,右,上}&#xff0c;策…

【零基础学习06】嵌入式linux驱动中PWM驱动基本实现

大家好,今天给大家分享一下,如何利用PWM外设来实现LCD背光调节,本次实验使用Linux系统中PWM控制器以及PWM子系统来控制对应的功能。 第一:设备树下PWM控制节点 PWM对应的节点信息如下: pwm3: pwm@02088000 {compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm…

Linux(ubuntu) 安装kotlin

Kotlin 是一种基于 Java 语言的静态类型编程语言&#xff0c;它可以运行于 JVM 上 1. 安装 Java Development Kit (JDK) Kotlin 运行于 JVM 上&#xff0c;所以首先需要安装 Java Development Kit&#xff08;JDK&#xff09; Ubuntu 或 Debian 系统 以ubuntu22.04为例 sudo…

操作系统系列学习——一个实际的schedule函数

文章目录 前言一个实际的schedule函数 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划学习操作系统并完成6.0S81&#xff0c;加油&#xff01; 本文总结自B站【哈工大】操作系统 李治军&#xff08;全32讲&#xff09; 老师课程讲的非常好&#xff0c;感…

我打算修一段时间仙,望周知

1、大科学家牛顿也修过仙&#xff0c;虽然修的是西方的仙&#xff1b;我们东方人不信那个邪&#xff0c;有自己优秀的传统文化&#xff0c;我只修东方的仙&#xff1b;另外&#xff0c;作为普通凡人我成就和智慧都无法望牛顿老人家项背的普通人&#xff0c;即使现在暂时“修仙”…

设计模式--享元模式(Flyweight Pattern)

享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;它的主要目的是用共享技术有效地支持大量细粒度的对象。 享元模式主要包含以下几个角色&#xff1a; Flyweight&#xff08;抽象享元类&#xff09;&#xff1a;定义一个接口&#xff0c;…