java学习--day10 (继承)

2023-09-19 22:36:47

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) {
		
	}

}

更多推荐

Java实现图书管理系统

一、分析有主要对象二、整理思路三、框架的搭建四、操作内部的具体实现一、分析主要对象我们做的图书管理系统的目的,是可以根据不同的用户,所能执行的操作不一样,主要有增删查改图书等操作,选择这些不同的操作会给我们反馈不一样的结果,而我们的主要对象就有书、书架、用户、操作这四个对象。二、整理思路书里面可以放书名、作者、价格等变

VS2019的SDL2项目配置

库下载SimpleDirectMediaLayer-Homepage对于Windows下使用VS2019开发的选手,应该直接选VC后缀了。VS目录配置首先VS2019创建一个空项目,新加入一个源文件,代码如下:/*ThissourcecodecopyrightedbyLazyFoo'Productions2004-20

【C++】topk问题

解决topK问题是寻找给定数据集中前K个最大或最小的元素。常见有三种算法:堆排序维护一个大小为K的最小(或最大)堆。遍历数据集,将元素插入堆中,如果堆大小超过K,则删除堆顶元素。遍历结束后,堆中剩余的K个元素就是前K个最小(或最大)的元素。时间复杂度:O(NlogK),其中N为数据集大小。示例代码如下:#include

Docker 恶意挖矿镜像应急实例

01、概述当网络流量监控发现某台运行多个docker容器的主机主动连接到一个疑似挖矿矿池的地址时,需要快速响应和排查,以阻止进一步的损害。面对docker容器的场景下,如何快速分析和识别恶意挖矿容器?本文将分享一种应急响应思路,用于排查运行多个Docker容器的主机中可能存在的恶意挖矿容器。02、定位容器在宿主机上通过

C 风格文件输入/输出---错误处理---(std::clearerr,std::feof,std::ferror,std::perror)

C++标准库的CI/O子集实现C风格流输入/输出操作。<cstdio>头文件提供通用文件支持并提供有窄和多字节字符输入/输出能力的函数,而<cwchar>头文件提供有宽字符输入/输出能力的函数。错误处理清除错误std::clearerrvoidclearerr(std::FILE*stream);重置给定文件流的错误标

APP产品经理的主要内容(合集)

APP产品经理的主要内容1职责:1.成产品的功能、流程、界面设计,协调设计资源落实产品交互、原型设计;2.负责产品上线后客户反馈跟踪,并根据产品规划策略和客户反馈优先级落实产品改进设计计划,不断提升竞争力。3.关注竞争对手和用户的产品反馈,分析并提供应对方案,改进相关产品;4.保证产品的可用性和易用性,为产品体验和效果

Time-distributed 的理解

“Time-distributed”是一种用于深度学习处理序列数据的技术,它将神经网络中的层或网络独立地应用于序列的每个时间步长。在典型的前馈神经网络中,输入数据会被馈送到网络中,并且相同的权重会被应用于所有的输入特征。但是,当处理序列数据,如时间序列或自然语言时,我们需要在每个时间步长上应用相同的权重来捕捉时间信息。

网页采集器-免费的网页采集器

在互联网上,蕴藏着无穷无尽的信息宝藏,无论您是一名学生、研究人员、市场分析师还是企业家,都需要从网络上搜集各种信息来支持您的工作和决策。然而,互联网上的信息千差万别,分散在不同的网站和页面上,如何高效地采集和整理这些信息?免费全自动采集发布批量管理网站工具-147SEO​www.147seo.com/post/1196

文档信息抽取技术:从非结构化文本到结构化信息的旅程

文档信息抽取技术是一种将非结构化文本转化为结构化信息的技术。这种技术可以从各类文档中自动提取出如实体、关系和其他重要信息,并将它们转化为方便计算机进一步处理和分析的格式。技术点包括:1.文本预处理:对文档进行清洗和预处理,这包括统一字符编码、消除冗余和重复内容、去除特殊字符和HTML标签、处理拼写错误、进行分词、识别和

Linux工具(一)

前言:Linux是一个开源的操作系统,它拥有庞大而活跃的开发社区,为用户提供了丰富多样的工具和应用程序。这些工具不仅适用于系统管理员和开发人员,也适用于普通用户,可以帮助他们完成各种任务,从简单的文件管理到复杂的系统配置。从本文开始,我们将系列学习五个Linux的入门开发工具,本期我们先来介绍两个工具:yum和vim工

ETHERNET IP站转MODBUS RTU协议网

产品介绍JM-EIP-RTU是自主研发的一款ETHERNET/IP从站功能的通讯网关。该产品主要功能是将各种MODBUS-RTU设备接入到ETHERNET/IP网络中。JM-EIP-RTU连接到ETHERNET/IP总线中做为从站使用,连接到MODBUS-RTU总线中做为主站或从站使用。产品参数技术参数l网关做为ETH

热文推荐