java学习--day10 (继承)

文章目录

      • day9作业
      • 今天的内容
      • 1.继承
        • 1.1.生活中的继承
        • 1.2.Java中继承
        • 1.3关于父类子类的内存分析
        • 1.4重写【重点】
        • 1.5重载【overload】

day9作业

1.构造代码块和构造方法的区别
{代码块
}
public 类名 () {}
都是实例化一个对象的时候执行的
只不过构造代码块先于构造方法执行的
2.局部变量和成员变量区别局部变量写在方法中,只能在方法体中使用,出了这个方法就不能再使用了成员变量写在类中,整个类都可以使用的。
3.声明类的语法格式class 类名 {属性构造方法方法}
4.一个类中属性的意义是啥用来描述一个类的特征的,可以通过对象对这个特征进行赋值的
5.构造方法的语法格式
public 类名 () {}
public 类名 (参数) {}
6.逻辑运算符的简单介绍7.封装1.对成员变量加修饰符 private2.一定要写setter和getter方法进行赋值和取值即可8.this关键字1.this关键字可以调用成员属性和方法2.this还可以调用构造方法9.一个类对象作为方法的参数10.多类合作

今天的内容

1.继承

2.继承的内存分析

3.重写和重载

1.继承

Java 有三大特性: 封装 继承 多态

1.1.生活中的继承

子承父业

龙生龙 凤生凤

老鼠生来会打洞

你长得真像你父亲

1.2.Java中继承

继承是类和类之间的关系

继承至少得两个类:

语法格式:

class B  extends A {}

其中 B是一个类,A是一个类

B类继承了A类。 B叫A的子类。A是B的父类(超类,基类)

入门案例:

package com.qfedu.b_extends;class Father {String name;int age;//行为public void eat () {System.out.println("吃大盘鸡拌面");}
}
//使用了extends以后  Son 类就继承了Father这个类
//就意味着我Son类可以使用Father类下面某些属性和某些方法
class Son extends Father{}public class Demo1 {public static void main(String[] args) {Son son = new Son();//发现继承以后,可以使用父类一些属性son.name = "小骚磊";son.age = 1;System.out.println(son.name);System.out.println(son.age);son.eat();}}

案例:

Animal 类 父类

Dog类 子类

Cat类 子类

继承的意思,就是将父类的属性和方法拿到子类中去使用

1.成员变量(属性)

​ 公开的和默认的属性,子类可以继承使用的

​ 私有的成员变量,子类无法使用的

2.成员方法

​ 公开的和默认的成员方法,子类可以继承使用

​ 私有的成员方法,子类无法使用的

总结:凡是私有的 无法继承。

3.构造方法

​ 先执行父类的构造,再执行子类的构造方法

​ 如果父类中有有参构造,但是没有无参构造。子类会报错

​ 关于构造方法:父类与子类的构造方法的形式保持一致。
​ 父类中有无参构造。子类也有无参构造。父类中没有无参构造,子类也没有无参构造方法

package com.qfedu.c_extends;class Father {//只要是公开的或者默认的属性,子类可以使用的public String name;//公开的一个属性int age;//就是默认的属性private int id;//private修饰的 子类不能使用public Father () {System.out.println("父类的构造方法");}public Father (String name) {this.name = name;}//eat方法 使用public修饰的  子类可以使用public void eat () {System.out.println("吃窝窝头");}//默认的方法  子类是可以使用的void work () {System.out.println("开拖拉机耕地");}//  使用private修饰的方法就是私有化的方法,子类能调用吗?不能private void smoking () {System.out.println("抽旱烟");}	
}
class Son extends Father {//在子类写有参构造即可}
public class Demo1 {public static void main(String[] args) {Son son = new Son();//验证name  age在子类中可以使用的son.name = "狗蛋";son.age = 12;//son.id = 12;son.eat();//可以使用父类的公开的方法son.work();//不可以使用父类私有化的方法//.son.smoking();}}

刚才在写代码的时候,发现私有成员变量子类不能用。还有私有化的方法子类不能调用。咋办?

package com.qfedu.c_extends;class Father1 {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}private void smoking () {System.out.println("抽旱烟");}public void test () {smoking();}}
class Son1 extends Father1 {}
public class Demo2 {public static void main(String[] args) {Son1 son1 = new Son1();//咋办? 可以使用setter和getter方法//son1.name = "";son1.setName("狗蛋");System.out.println(son1.getName());son1.test();}}

练习的案例:

​ Animal 类:

​ 属性 : name, age ,sex 私有化的

​ 方法: 吃 运动

​ 子类:Panda

​ 使用Panda继承Animal 并可以使用Animal下面的所有属性和方法,对属性进行赋值

​ 方法调用

package com.qfedu.c_extends;class Animal {private String name;private int age;private char sex;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}//方法public void eat () {System.out.println("吃饭");}public void sport () {System.out.println("运动");}}
class Panda extends Animal {}
//继承有啥好处呢?代码可以重复利用
class Cat extends Animal {}
class Dog extends Animal {}
public class Demo3 {public static void main(String[] args) {Panda panda = new Panda();panda.setName("熊大");panda.setAge(9);panda.setSex('公');panda.eat();panda.sport();}}

继承:

​ Java中的继承都是单继承。只能有一个父类

​ Java中可以多重继承

package com.qfedu.c_extends;class A {}
class B extends A{}
class C extends B {}
public class Demo4 {public static void main(String[] args) {}}

总结:

1.至少两个类,使用关键字extends
2.子类是否能使用父类的成员变量和成员方法子类不能使用父类私有化的所有的东西

1.3关于父类子类的内存分析

在这里插入图片描述

1.4重写【重点】

Override

重写目的:子类可以继承父类的非私有化的方法,但是有的 时候父类的需求满足不了子类的需求了,这个时候需要重写父类非私有的方法

​ 重写要求:

1.必须有继承关系
2.父类的方法必须是非私有化的
3.在子类中重写父类的方法,这个方法除了方法体不一样其他都一样的。
4.必须再子类中去重写
package com.qfedu.d_override;class Father {public void eat () {System.out.println("吃粗粮。。。。。。");}public void driver () {System.out.println("开拖拉机。。。。。");}
}
//当父类不能满足子类的需求的话可以在子类中重写父类的方法
class Son extends Father {//重写的时候在子类中 只需要打上方法的名字一敲回车即可//重写的方法  和父类 的 返回值  参数  方法名字 一模一样,但是方法体不一样的@Override//是重写的严格限定,只要有这个,就证明咱们下面的这个方法//就是重写的方法,告知程序员 此时eat方法是重写的不是自己独有的public void eat() {System.out.println("吃白面馒头......");}@Overridepublic void driver() {System.out.println("开小汽车");}}
public class Demo1 {public static void main(String[] args) {Son son = new Son();son.eat();son.driver();//重写的话,是不影响父类的方法的Father father = new Father();father.eat();father.driver();}}

案例:

父类:交通工具:方法 run();
两个子类:飞机:方法 run()高铁:方法 run()公交车:方法 run()
package com.qfedu.d_override;class Transportation {public void run () {System.out.println("可以跑......");}}
class Fly extends Transportation {//是继承 我就u可以重写父类下面的方法了@Override//开启重写的严格的限制,告知编译器,下面的方法必须是重写的public void run () {System.out.println("飞机跑的很快大概500km/h");}}
class Train extends Transportation {@Overridepublic void run() {System.out.println("在铁轨上跑的300km/h");}
}
class Bus extends Transportation {@Overridepublic void run() {System.out.println("在公路上跑的60km/h");}
}
public class Demo2 {public static void main(String[] args) {Train train = new Train();train.run();}}

1.5重载【overload】

在Java中同一个类中可以有很多个方法。方法名字一样。但是参数类型不一样。这种叫重载

总结:

1.方法的重载必须在同一个类中
2.方法名字必须一致
3.方法的参数类型必须不一样
4.方法的返回值可以不一样
5.无参构造和有参构造 也是一种重载

面试题: 重写和重载的区别

package com.qfedu.d_override;class Person {//在一个类中,方法法名字一样,但是参数一定不一样。这叫方法的重载//返回值可以不一样public void test () {System.out.println("test");}public void test (String name) {System.out.println(name);}public void test (int i) {System.out.println(i);}void test (double d1) {}public String test(String str1, String str2) {return str1 + str2;}
}
public class Demo3 {public static void main(String[] args) {}}

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

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

相关文章

谷粒商城篇章6 ---- P193-P210 ---- 异步线程池商品详情【分布式高级篇三】

目录 1. 异步 1.1 初始化线程的 4 种方式 1.1.1 继承 Thread 1.1.2 实现 Runnable 接口 1.1.3 实现 Callable 接口 FutureTask 1.1.4 线程池 1.1.5 以上 4 种方式总结: 1.2 线程池详解 1.2.1 初始化线程池的 2 种方式 1.2.1.1 使用 Executors 创建 1.2…

已解决 Rust Error: cannot borrow `x` as mutable more than once at a time

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页: 🐅🐾猫头虎的博客🎐《面试题大全专栏》 🦕 文章图文并茂&#x1f996…

深入理解算法的时间复杂度

文章目录 时间复杂度的定义时间复杂度的分类时间复杂度分析常见数据结构和算法的时间复杂度常见数据结构常见算法 常见排序算法说明冒泡排序(Bubble Sort)快速排序(Quick Sort)归并排序(Merge Sort)堆排序(Heap Sort) 时间复杂度的定义 时间复杂度就是一种用来描述算法在输入规…

数据集成:数据挖掘的准备工作之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…

Markdown(MD)——Typora Markdown安装教程(2023九月亲测可用!!!)

目录 一、简介 1.Markdown简介 2.Markdown特点 3.Typora简介 二、安装教程 1.下载安装包 2.解压到文件夹 3.安装 4.破解 ​编辑5.激活 三、Markdown常用语法 1.常用语法 2.用于编辑LaTex公式 四、其他编辑器 一、简介 1.Markdown简介 Markdown 是一种轻量级标记语…

【深度学习实验】前馈神经网络(二):使用PyTorch实现不同激活函数(logistic、tanh、relu、leaky_relu)

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 定义激活函数 logistic(z) tanh(z) relu(z) leaky_relu(z, gamma0.1) 2. 定义输入、权重、偏置 3. 计算净活性值 4. 绘制激活函数的图像 5. 应用激活函数并…

lv4 嵌入式开发-9 静态库与动态库的使用

目录 1 库的概念 2 库的知识 3 静态库特点 4 静态库 4.1静态库创建 4.2 编译生成目标文件 4.3 创建静态库 hello 4.4 查看库中符号信息 4.5 链接静态库 5 共享库特点 6 共享库 6.1 共享库创建 6.2 编译生成目标文件 6.3 创建共享库 common 6.4为共享库文件创建…

Docker 应用部署

Docker 应用部署 一、部署MySQL 搜索MySQL镜像 拉取MySQL镜像 docker pull mysql:8.0创建容器,设置端口映射,目录映射 # 在root/home/mysql目录下创建MySQL目录用于存储MySQL数据信息 mkdir /root/home/mysql cd /root/home/mysql创建并运行 # 330…

面试官:请说说flex布局_番茄出品.md

面试官:请说说flex布局_番茄出品.md start 依然记得当初学习 flex 布局时,用 flex 布局:画麻将。一筒到九筒,应有尽有。但是光和面试官说,我用 flex 布局画过麻将,并没有什么用。面试官问你一个语法&…

基于SpringBoot+Vue的家具销售电商平台设计与实现

前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻…

spark6. 如何设置spark 日志

spark yarn日志全解 一.前言二.开启日志聚合是什么样的2.1 开启日志聚合MapReduce history server2.2 如何开启Spark history server 三.不开启日志聚合是什么样的四.正确使用log4j.properties 一.前言 本文只讲解再yarn 模式下的日志配置。 二.开启日志聚合是什么样的 在ya…

OpenCV项目实战(2)— 如何用OpenCV实现弹球动画

前言:Hello大家好,我是小哥谈。OpenCV能够在画布上绘制静态的图形,例如,线段、矩形、正方形、圆形、多边形、文字等。那么,能不能让这些静态的图形移动起来?如果能,又该如何编写代码呢&#xff…

Flutter框架和原理剖析

Flutter是Google推出并开源的跨平台开发框架,主打跨平台、高保真、高性能。开发者可以通过Dart语言开发Flutter应用,一套代码同时运行在ios和Android平台。不仅如此,flutter还支持web、桌面、嵌入应用的开发。flutter提供了丰富的组件、接口&…

【后端速成 Vue】初识指令(上)

前言&#xff1a; Vue 会根据不同的指令&#xff0c;针对标签实现不同的功能。 在 Vue 中&#xff0c;指定就是带有 v- 前缀 的特殊 标签属性&#xff0c;比如&#xff1a; <div v-htmlstr> </div> 这里问题就来了&#xff0c;既然 Vue 会更具不同的指令&#…

在SpringBoot项目中整合SpringSession,基于Redis实现对Session的管理和事件监听

1、SpringSession简介 SpringSession是基于Spring框架的Session管理解决方案。它基于标准的Servlet容器API&#xff0c;提供了Session的分布式管理解决方案&#xff0c;支持把Session存储在多种场景下&#xff0c;比如内存、MongoDB、Redis等&#xff0c;并且能够快速集成到Spr…

微服务07-认识MQ+RabbitMQ入门

1.前言 了解同步调用和异步调用 1.1.同步调用 比如这里的支付服务&#xff0c;需要等待订单服务、短信服务…执行完毕才能执行&#xff0c;这样支付整个流程完毕需要500ms 然后如果订单、仓储等其中一个服务挂掉了&#xff0c;那么支付服务请求请求不了&#xff0c;挂掉的服…

一文读懂SSL、TLS和mTLS的通信安全协议

今天让我们深入探讨一下SSL、TLS和mTLS等一系列重要的通信安全协议。尽管从整体系统设计的角度来看,这个主题可能并不是至关重要,但仍然值得我们深入了解。 1. SSL协议 SSL,即安全套接字层(Secure Socket Layer),是一种通信协议,旨在加密和保护互联网通信的安全性。虽…

Windows+Pycharm 如何创建虚拟环境

当我们开发一个别人的项目的时候,因为项目里有很多特有的包,比如 Pyqt5.我们不想破坏电脑上原来的包版本,这个时候,新建一个虚拟环境,专门针对这个项目就很有必要了. 简略步骤: 1.新建虚拟环境 1.打开 pycharm 终端(Terminal)安装虚拟环境工具: pip install virtualenv2.创…

2023年度教育部人文社会科学研究一般项目评审结果,已公布!

【SciencePub学术】 9月15日&#xff0c;教育部社科司公示了2023年度教育部人文社会科学研究一般项目评审结果&#xff0c;共3482项。 其中&#xff0c;规划基金、青年基金、自筹经费项目共3029项通过专家评审&#xff1b;西部和边疆地区项目200项&#xff0c;新疆项目20项&a…

【C++面向对象侯捷】5.操作符重载与临时对象

文章目录 operator loading&#xff08;操作符重载-1&#xff0c;成员函数&#xff09; this返回值&#xff1a;引用 分析Header&#xff08;头文件&#xff09;的布局操作符重载-2&#xff0c;非成员函数&#xff08;无 this&#xff09;临时对象&#xff1a;返回的 绝不可能是…