java学习--day10 (继承)

news2024/11/26 19:25:10

文章目录

      • 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.对成员变量加修饰符 private
 	2.一定要写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("吃白面馒头......");
	}
	@Override
	public 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 {
	@Override
	public void run() {
		System.out.println("在铁轨上跑的300km/h");
	}
}
class Bus extends Transportation {
	@Override
	public 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.coloradmin.cn/o/1023604.html

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

相关文章

VSCode『SSH』连接服务器『GUI界面』传输

前言 最近需要使用实验室的服务器训练带有 GUI 画面的 AI 算法模型(pygame),但是我是使用 SSH 连接的,不能很好的显示模型训练的效果画面,所以下面将会讲解如何实现 SSH 连接传输 Linux GUI 画面的 注:我们…

面试官:什么是虚拟DOM?如何实现一个虚拟DOM?说说你的思路

🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 一、什么是虚拟DOM 二、为什么需要虚拟DOM 三、如何实现虚拟DOM 小结 一、什么是虚拟DOM 虚拟 DOM &#xff08…

统计物理学复习----粒子的最概然分布

热力学中,每个粒子都是相同的统计物理学中,每个粒子是有差别的,对差别的不同处理方式决定了不同的统计理论理论力学中,质点可以用r个广义坐标与r个广义动量描述,这2r个变量的基构成了一个参数空间 经典统计理论 自由粒…

WorkPlus打造企业移动门户,实现高效协作与便捷访问

在移动互联网的时代,企业对于高效的协作和便捷的访问需求日益增长。WorkPlus作为领先品牌,致力于打造企业移动门户,帮助企业实现高效协作与便捷访问。本文将重点介绍WorkPlus如何通过创新的解决方案,为企业提供定制化的企业移动门…

netty server端启动源码阅读分析

服务端的启动通过ServerBootstrap类来完成,ServerBootstrap内有以下主要属性 ServerBootstrap extends AbstractBootstrap {//处理channel连接事件的线程组EventLoopGroup group;//处理channel其它事件的线程组EventLoopGroup childGroup;//创建channel的工厂类Cha…

基于PyTorch搭建Mask-RCNN实现实例分割

基于PyTorch搭建Mask-RCNN实现实例分割 在这篇文章中,我们将讨论 Mask RCNN Pytorch 背后的理论以及如何在 PyTorch 中使用预训练的 Mask R-CNN 模型。 1. 语义分割、目标检测和实例分割 在之前的博客文章里介绍了语义分割和目标检测(如果感兴趣可以参…

【golang】调度系列之P

调度系列 调度系列之goroutine 调度系列之m 在前面两篇中,分别介绍了G和M,当然介绍的不够全面(在写后面的文章时我也在不断地完善前面的文章,后面可能也会有更加汇总的文章来统筹介绍GMP)。但是,抛开技术细…

华为云云耀云服务器L实例使用教学 | 访问控制-安全组配置规则 实例教学

文章目录 访问控制-安全组什么叫安全组安全组配置默认安全组配置安全组配置实例安全组创建安全组模板配置安全组模板:通用Web服务器 配置安全组规则安全组配置规则功能介绍修改允许特定IP地址访问Web 80端口服务建立仅允许访问特定目的地址的安全规则配置网络ACL对实…

开源数字孪生基础设施

开源数字孪生基础设施 开源数字基础设施 开源数字基础设施 开源软件是基础设施发展的一种模式,这是在2007年美国科学基金会发布的《认识基础设施:动力机制、冲突和设计》中得出的结论。在这份55页的报告中三次集中谈到了开源软件(Open Sourc…

1999-2018年地级市经济增长数据

1999-2018年地级市经济增长数据 1、时间:1999-2018年 2、指标: 行政区划代码、城市、年份、地区生产总值_当年价格_全市_万元、地区生产总值_当年价格_市辖区_万元、人均地区生产总值_全市_元、人均地区生产总值_市辖区_元、地区生产总值增长率_全市_…

MySQL使用C语言链接

MySQL使用C语言链接 MySQL connect接口介绍mysql_initmysql_real_connectmysql_querymysql_store_result\mysql_use_result()mysql_num_rowsmysql_num_fieldsmysql_fetch_fieldsmysql_fetch_rowmysql_close MySQL connect 使用C语言来连接数据库,本质上就是利用一些…

「聊设计模式」之命令模式(Command)

🏆本文收录于《聊设计模式》专栏,专门攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎持续关注&&收藏&&订阅! 前言 在面向对象设计中,设计模式是重要的一环。设计…

c:Bubble Sort

/*****************************************************************//*** \file SortAlgorithm.h* \brief 业务操作方法* VSCODE c11* \author geovindu,Geovin Du* \date 2023-09-19 ***********************************************************************/ #if…

前端知识以及组件学习总结

JS 常用方法 js中字符串常用方法总结_15种常见js字符串用法_<a href"#">leo</a>的博客-CSDN博客 <script>var str"heool"console.log(str.length);console.log(str.concat(" lyt"));console.log(str.includes("he&quo…

WebPack5基础使用总结(一)

WebPack5基础使用总结 1、WebPack1.1、开始使用1.2、基本配置 2、处理样式资源2.1、处理Css资源2.2、处理Less资源2.3、处理Sass和Scss资源2.4、处理Styl资源 3、处理图片资源3.1、输出资源情况3.2、对图片资源进行优化 4、修改输出资源的名称和路径4.1、自动清空上次打包资源 …

想了解期权分仓交易和开户?这里告诉你。

期想了解期权分仓交易和开户&#xff1f;这里告诉你。权就是合约交易&#xff0c;通过买卖认购和认沽期权合约实现未来是否能赚钱&#xff0c;具备做多和做空T0双向交易机制&#xff0c;期权分仓开户就是零门槛开通期权账户&#xff0c;下文介绍想了解期权分仓交易和开户&#…

经验分享|作为程序员之后了解到的算法知识

欢迎关注博主 六月暴雪飞梨花 或加入【六月暴雪飞梨花】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术…

Java————栈

一 、栈 Stack继承了Vector&#xff0c;Vector和ArrayList类似&#xff0c;都是动态的顺序表&#xff0c;不同的是Vector是线程安全的。 是一种特殊的线性表&#xff0c; 其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端称为栈顶&#xff0c;另…

《计算机视觉中的多视图几何》笔记(4)

4 Estimation – 2D Projective Transformations 本章主要估计这么几种2D投影矩阵&#xff1a; 2D齐次矩阵&#xff0c;就是从一个图像中的点到另外一个图像中的点的转换&#xff0c;由于点的表示都是齐次的&#xff0c;所以叫齐次矩阵3D到2D的摄像机矩阵基本矩阵三视图之间的…

基于conda的相关命令

conda 查看python版本环境 打开Anaconda Prompt的命令输入框 查看自己的python版本 conda env list激活相应的python版本(环境&#xff09; conda avtivate python_3.9 若输入以下命令可查看python版本 python -V #注意V是大写安装相应的包 pip install 包名5.查看已安装…