类和对象3

news2024/10/5 20:47:18

继承

继承是三大面向对象特征之一,继承无处不在,继承不仅是代码复用,精髓之处在于用抽象思维编写代码,以达到程序更强的可扩展性。

//继承一个父类,只能继承非私有的数据(属性和方法)
//protected访问权限修饰符,在继承关系中使用。在父类中使用protected修饰的属性或方法可以被子类继承
//创建子类对象,父类对象的构造方法也会被调用:因为子类要用到父类的数据,那么就要通过父类的构造方法来初始化数据
//如果创建子类对象时使用默认的构造方法,那么父类默认构造方法也会被调用
//如果创建子类对象时使用的是带参数的构造,也会调用父类默认构造方法

//当父类中没有无参构造方法时,子类必须显示的调用父类的带参构造方法
//可以再子类中显示的使用super(...)调用父类的否早方法,只能出现在第一句
public class test {
    public static void main(String[] args) {
        HomeDog homedog = new HomeDog("旺财");
        homedog.print();
        homedog.eat(); //复用
    }
}

class Dog{
    protected String name; //protected访问权限修饰符,在继承关系中使用
    private String sex;
//    public Dog() {
//        System.out.println("我是DOG的构造方法");
//    }
    public Dog(String name ,String sex){
        this.name = name;
        this.sex = sex;
        System.out.println("我是DOG的构造方法");
    }
    public void eat(){
        System.out.println("吃饭");
    }
}
class HomeDog extends Dog{

    public HomeDog(String name) {
//        this.name = name;
        super(name,"公");
        System.out.println("我是HOMEDOG的构造方法");
    }
    public void print() {
        System.out.println(name+"我是一只家狗");
    }

}

class HuskyDog extends Dog{
    public HuskyDog() {
        super("hashiqi","母");
        System.out.println("我是HUSKYDOG的构造方法");
    }
    public void show() {
        System.out.println(name+"我是husky");
    }
}

 方法重写:

public class test {
    public static void main(String[] args) {
        HomeDog homedog = new HomeDog("旺财");
        homedog.print();
        homedog.eat(); //复用
    }
}

class Dog{
    protected String name; //protected访问权限修饰符,在继承关系中使用
    private String sex;
//    public Dog() {
//        System.out.println("我是DOG的构造方法");
//    }
    public Dog(String name ,String sex){
        this.name = name;
        this.sex = sex;
        System.out.println("我是DOG的构造方法");
    }
    public void eat(){
        System.out.println("吃饭");
    }
}
class HomeDog extends Dog{

    public HomeDog(String name) {
//        this.name = name;
        super(name,"公");
        System.out.println("我是HOMEDOG的构造方法");
    }
    public void print() {
        System.out.println(name+"我是一只家狗");
    }

    public void eat(){
        System.out.println("我要吃饭饭wahuhuhu"); //方法重用
    }

}

class HuskyDog extends Dog{
    public HuskyDog() {
        super("hashiqi","母");
        System.out.println("我是HUSKYDOG的构造方法");
    }
    public void show() {
        System.out.println(name+"我是husky");
    }
    public void eat(){
        System.out.println("我喜欢吃鸡肝"); //方法重用,重写父类的方法
    }
}

overloading(方法重载)与overridding(方法重写)的区别?

 overloading:方法的重载,发生在同一个类中,方法名相同,参数列表不同,返回值无关。

overridding:方法的重写,发生在子父类中,方法名相同,参数列表相同,返回值相同,子类的访问修饰符要大于或等于父类的访问修饰符,子类的异常声明必须小于或等于父类的异常声明,如果方法被private,static,final修饰,那么不能被重写。


重写与重载的区别,切记方法的重写是发生在子父类继承关系中,不同于方法重载发生在同一个类。

 super关键字

 继承的应用思考题:

 比较两个字符串相等,不能使用==,使用eauals()

final关键字(相当于const)

final关键字,声明的属性值不能改,声明的方法不能被子类重写,声明的类无法被继承(扩展)。

/**
 * final关键字
 * 1.使用final声明一个属性,就是常量,常量的命名规则建议使用全大写,常量必须在定义时或在构造时进行初始化
 * 2.使用final声明的方法,不能被子类重写,只能被继承,“最终方法的意思”
 * 3.使用final声明一个类,该类就转变为最终类,没有子类,无法被继承
 * 4.作为方法中的参数,方法中不可改变
 */
public class test {
    //private static final int PERSON_NUM = 10; //常量不能修改,与对象无关,所以通常加上static
    public static void main(String[] args) {
        System.out.println(Constant.PERSON_NUM);

    }
}

//常量类(工具类,使得其他类都能调用
//在实际项目开发中,常用于定义项目一些公共的,不变的数据
class Constant {
    public static final int PERSON_NUM = 10; //人数
}

final class Constant1{
    public static final int HH=100;
}

//无法从final继承
//class Constant2 extends Constant1{
//
//}

class FinalClass {
    public final int DAY_NUMBER; //工作天数

    public FinalClass() {
        DAY_NUMBER = 22;
    }

    public final void print(){
        System.out.println("我是final方法");
    }

    public void SetLength(final int size) {
//        size++;
//        无法赋值给size
    }
}

class SunClass extends FinalClass{
//test.SunClass中的print()无法覆盖test.FinalClass中的print()
//    public void print(){
//        System.out.println("我是final1方法");
//    }
}

 抽象类:

很多对象可以抽象出一个类,很多类可以抽象出抽象类

 

接口:

接口是所有行为的抽象,面向接口编程,目的是让程序更加易于维护,扩展性更强,接口只定义标准,而非具体实现。 接口之间可以多继承(注意类只能单继承),实现接口的类也可以多继承。

接口中定义的方法没有声明修饰符,默认为public abstract

 

多态性:

 多态是抽象编程的精髓所在,用抽象的思维写代码,在运行过程中再传入具体的对象,同面向接口编程如出一辙。

 

 

如下图所示,编译期将会检查chicken类的方法,是否有eat,song;若传入chicken的子类,子类中虽然有这俩个方法,但chicken类中没有,就会报错,因为编译期就已经出现了问题。所以程序要考虑编译期和运行时两方面的错误。

 

 若想用子类jianjiaochicken的方法,在eat方法中需要进行强制转换,以达到使用song的方法。

 

  instead of关键字 

对象本身以及对象的父类型,都可以通过检查。

 

 抽象类应用——模板方法模式

其精髓之处在于定义一个算法框架,也就是把共有部分抽象出来,这是对未来底层框架设计非常有用。

拓展:

单继承、多继承、虚继承_sophia__yu的博客-CDN博客_单继承和多继承的区别https://blog.csdn.net/sophia__yu/article/details/82791522?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%8D%95%E7%BB%A7%E6%89%BF%E5%92%8C%E5%A4%9A%E7%BB%A7%E6%89%BF%E7%9A%84%E5%8C%BA%E5%88%AB&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-82791522.142%5Ev70%5Ejs_top,201%5Ev4%5Eadd_ask&spm=1018.2226.3001.4187

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

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

相关文章

大数据之Kafka基本知识和架构介绍

文章目录前言一、Kafka的基本介绍(一)Kafka的特点二、Kafka的架构总结前言 #博学谷IT学习技术支持# 本篇文章主要从Kafka的基本介绍,Kafka的架构入手,如果有不恰当或者有疑问的地方,非常欢迎各位的意见和建议&#xf…

jetson连接PCF8591读取模拟电压值

文章目录一.PCF8591介绍PCF8591引脚说明PCF8591设置地址二.PCF8591模块功能描述:主要性能指标:三.PCF8591模块接口说明三.PCF8591连接jetson nano四.jetson nano 获取PCF8591模块的输入输出python版本代码C版本代码一.PCF8591介绍 PCF8591是一个单片集成、 单独供电、 低功耗、…

【Linux】Linux编译器—gcc/g++的使用

目录一.背景二.gcc如何生成1.预处理(进行宏替换)2.编译(生成汇编)3.汇编(生成机器可识别代码)4.链接(生成可执行文件或库文件)三.函数库1.函数库的分类(1)动态库(2)静态库2.区别3.拓展四.记忆1.选项2.后缀五.gcc选项该篇博客需要使用vim编译器&#xff0…

excel排序技巧:这些不同方式的排序方法你都会了么

都说这Excel里暗藏玄机,求最大值的MAX函数可以用于查找,用于查找的LOOKUP函数可以对数据进行四舍五入…就连看似人人都会的Excel自动排序,也藏着许多我们不知道的“小秘密”。今天我们就来探索一下这些藏在自动排序中的“小秘密”。一、扩展选…

Numpy数据分析csv文件的应用

1.数据存取与函数 1.1.数据的CSV文件存取 CSV(Comma-Separated Value,逗号分隔值) CSV是一种常见的文件格式,用来存储批量数据 np.savetxt(frame, array, fmt‘%.18e’, delimiterNone) 复制代码 frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩…

SpringCloud从入门到精通(七)

Gateway Gateway-概述 网关旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。 在微服务架构中,不同的微服务可以有不同的网络地址,各个微服务之间通过互相调用完成用户请求,客户端可能通过调用N个微服务的接口完成一个用户请求…

【C++】优先级队列、仿函数和反向迭代器

​🌠 作者:阿亮joy. 🎆专栏:《吃透西嘎嘎》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉priority…

工具及方法 - 字幕下载网站

1,射手网(伪) 首页 - 射手网(伪) - assrt.net - 字幕下载,字幕组,中文字幕,美剧字幕,英剧字幕,双语字幕,新番字幕 2,国外网站。 Subscene - Passionate abo…

sentinel-热点参数限流

Pages 60 Sentinel 官方网站 OpenSergo 微服务治理 文档 Read Me新手指南Sentinel 介绍FAQRoadmap如何使用工作原理流量控制集群流控(分布式流控)网关流控熔断降级热点参数限流系统自适应限流黑白名单控制实时监控数据动态规则控制台生产环境使用 Sent…

【自学Python】Python IDLE使用

Python IDLE使用 Python IDLE使用教程 在 Windows 上安装好 Python 之后,Python 都会提供一个 Python 命令行工具,就叫 IDLE。IDLE 是一个 Python Shell,Python Shell 可以用于与 Python 进行交互。 Python IDLE使用 打开Python IDLE 首…

分布式基础篇4 —— 基础篇完结(谷粒商城)

分类维护一、三级分类后端实现准备工作跨域问题关闭 ESLint 检查前端实现二、分类删除前端完善分类列表后端实现——删除配置发送请求代码片段前端实现——删除三、分类增加前端实现四、分类修改五、拖拽菜单拖拽效果实现拖拽数据收集拖拽功能完成拖拽功能完善六、批量删除品牌…

粒子系统-常用子模块

目录 Emission (发射) Shape (形状) Cone (锥形) Velocity over Lifetime (运动) Limit Velocity over Lifetime (速度限制) Force over lifetime (受力) Color over Lifetim…

【C语言航路】第十站:指针进阶(二)

目录 六、函数指针数组 七、指向函数指针数组的指针 八、回调函数 1.回调函数的概念 2.回调函数实现计算器 3.回调函数实现冒泡排序 总结 六、函数指针数组 我们已经知道了函数指针,它的类型是int(*)(int,int)。那么我们能否进行推广呢?将其推广成…

基于AD Event日志实时检测DSRM后门

01、简介每个域控制器都有一个目录还原模式(DSRM)帐户,它的密码是在安装域控时设置的,实际上它对应的就是sam文件里的本地管理员“administrator”,基本很少会被重置,因此有着极强的隐蔽性。攻击者通过获取…

面试篇之NoSQL

面试篇之NoSQL一、redis持久化1.1、字节1.2、微软1.3、题解1.3.1、RDB快照1.3.2、AOF日志1.3.3、最佳实践二、redis删除策略2.1、字节2.2、阿里云2.3、题解2.3.1、过期删除2.3.2、内存淘汰2.3.3、LRU2.3.4、LFU三、redis高可用3.1、字节3.2、美团3.3、微软3.4、题解3.4.1、主从…

前端性能优化(六):传输加载优化

目录 一:启用压缩 Gzip 二:启用 Keep Alive 三:HTTP 资源缓存 3.1.HTTP 缓存方案 3.2.各大网站缓存策略参考 四:Service Worker 五:HTTP2 的性能提升 5.1.HTTP2 优势 5.2.开启 HTTP2 5.3.Server Push&#x…

【Spring(五)】带你深入了解bean的生命周期

1.5 bean的生命周期 bean的实例化已经说完了,我们最后再来讲讲bean的生命周期。 我们主要来围绕着bean生命周期控制来学习,那么什么是生命周期呢?其实就是一个东西从创建到消亡的完整过程,比如人从出生到死亡的整个过程&#xff…

【MySQL进阶】深入理解redoLog日志

【MySQL进阶】深入理解redoLog日志 文章目录【MySQL进阶】深入理解redoLog日志一:redo日志概述二:redo日志格式三:Mini-Transaction1:以组的形式写入redo日志2:Mini-Transaction的概念四:redo日志的写入过程…

富淼转债,优彩转债上市价格预测

富淼转债基本信息转债名称:富淼转债,评级:A,发行规模:4.5亿元。正股名称:富淼科技,今日收盘价:18.25,转股价格:20.26。当前转股价值 转债面值 / 转股价格 * …

(3分钟速览)SLAM中的三大金刚-H E F Matrix

编辑切换为居中添加图片注释,不超过 140 字(可选)三个矩阵的自由度:单应矩阵H 自由度8基础矩阵F 自由度7本质矩阵E 自由度5或者8,这个是根据使用旋转矩阵还是旋转向量编辑切换为居中添加图片注释,不超过 14…