java详解第二章:类的继承

什么是继承?Java中如何声明一个类继承另一个类? (4)在Java中,子类和父类是一种相对概念,也就是说,一个类是某个类父类的同时,也可以是另一个类的子类。在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类或基类,子类会自动拥有父类所有可继承的属性和方法。(1)在Java中,类只支持单继承,不允许多重继承,也就是说一个类只能有一个直接父类,例如下面这种情况是不合法的。(3)在Java中,多层继承是可以的,即一个类的父类可以再去继承另外的父类,例如下面这种情况是允许的。 阅读详情

1. 为什么需要使用继承?

①.提高代码的重用性

比如说你想要建立学生类和老师类,这两个类都属于人类,即人类的属性和方法这两个类都有,通过继承我们只需将这些类定义一遍,提高了重用性。

②.提高程序的扩展性

如果你想将一个类详细化,那么能且只能将其往一个方面详细化,比如你想将人类详细化,那么你只能往同学类或老师类,不能同时往这两个方面详细化,不然得到的类既不是同学类又不是老师类,而是师生类。因此通过继承可以提高类的扩展性,将一个类扩展到无数个类。

2.Java继承的语法格式

Java继承的关键字:extends

继承的语法格式:

public class 类名(子类/派生类/超类)  extends 类名(父类/基类) {

            

}

注意:Java中类的继承是单继承,正如一个儿子只能有一个亲生父亲。

3.子类能继承到父类的那些内容?

子类能继承到父类中所有的属性和方法。

访问修饰符是用来限定属性和方法在什么情况下能被调用:

访问修饰符

同类中

同包中

不同包中

不同包但是有继承关系的子类中

private

可以

不可以

不可以

不可以

空

可以

可以

不可以

不可以

protected

可以

可以

不可以

可以

public

可以

可以

可以

可以

由此可见四种访问修饰符的大小顺序为:

public>protected>空>private

比如有4个java文件内容如下:

A.java:(同类中)

package class1;

public class A{
	public String name;
	int number;
	protected String sex;
	private String location;
	class B{
		public void getinf(){
			A a = new A();
			System.out.println(a.name);//public√
			System.out.println(a.number);//空√
			System.out.println(a.sex);//protected√
			System.out.println(a.location);//private√
		}
	}
}

C.java:(同包中)

package class1;

public class C {
	public void getinf() {
		A a = new A();
		System.out.println(a.name);// public√
		System.out.println(a.number);// 空√
		System.out.println(a.sex);// protected√
		System.out.println(a.location);// private×
	}
}

D.java:(不同包中也没有继承关系)

package class2;

import class1.A;

public class D {
	public void getinf() {
		A a = new A();
		System.out.println(a.name);// public√
		System.out.println(a.number);// 空×
		System.out.println(a.sex);// protected×
		System.out.println(a.location);// private×
	}
}

E.java:(不同包中但有继承关系)

package class2;

import class1.A;

public class E extends A{
	public void getinf() {
		E e = new E();
		System.out.println(e.name);// public√
		System.out.println(e.number);// 空×
		System.out.println(e.sex);// protected√
		System.out.println(e.location);// private×
	}
}

4.理解继承

○问:子类是否可以定义父类中没有的属性和方法呢?

◎答:可以的。

★理解:子类继承父类就好像儿子继承父亲一样,首先父亲能被检查出来的基因会遗传给儿子,即父类中能访问到的属性和方法会继承给子类,让子类也有这些属性和方法;其次儿子可能会拥有一些父亲所没有的基因,有可能是后天的也有可能是突变了,即子类可以定义父类所没有的属性和方法。

 

○问:父母有一个学习的方法,子女也有一个学习的方法,那么两者的学习方法是否完成一致呢?

◎答:有可能会一致,但是也有不同的。

○问:如果不同怎么处理呢?

◎答:需要使用方法重写来解决这个问题。

★理解:就好像所谓的代沟,同样做某件事,有时儿子会学父亲怎么做怎么做,就所谓子类继承了父类的方法;但有时儿子会觉得父亲做的不对或者有更好的方法,就会产生不一样的做法,即不一样的方法体,但方法本身没发生改变,即还是要去做这件事。那么不改变方法,只改变方法体的这种行为便是重写。

 

实现方法重写必须要满足如下条件:

①.必须存在继承关系。

②.子类在重写父类方法时:子类方法的访问修饰符可以大于或者等于父类方法的访问修饰符。大小顺序在前面的表格下已给出。

③.子类在重写父类方法时:子类方法的返回值类型,方法名,参数都必须要和父类的完全一致。

④.方法中的代码要不同。

 

○问:方法重写后如何调用?

◎答:根据new关键字后的类名来决定,如果类名是子类的,那么会优先调用子类的方法,如果子类没有才会调用父类中的方法。

★理解:如父类class A有两个方法work()和play(),其子类class B继承class A,并且重写了方法work(),那么在方法中实例化:B b = new B();此时如果调用b.work(),调用的会是B中重写的方法work(),而不是A中的方法work();而调用b.play(),调用的则会是A中的方法play(),这个方法是通过继承使B也拥有的。

5.类的多态性

1.方法重载

一个方法名,参数不同,这叫方法重载。(Overload)

如在一个类中,可以有两个方法:foo(Stringstr)和foo(int number),他们的方法名相同,参数不同(包括参数类型和个数,只要不是完全一样就是不同),访问性可以不同,这样在调用时虽然是同一个方法名,系统会根据不同的参数而进不同的方法体。

2.方法重写

父类与子类有同样的方法名和参数,这叫方法重写。(Override)

方法重写的理解与格式之前已经解释了。

3.类的多态性

父类引用指向子类对象,调用方法时会调用子类的实现,而不是父类的实现,这叫多态。

如子类Child类继承父类Parent类:

Parentinstance = new Child();
instance.foo();//==> Child foo()

此时父类的实例化对象由于指向的是子类,所以调用的方法是子类的方法。

6.场景示例:

张老师现在教的是大学生的英语;那么这位老师是否可以教高中生英语?初中生?小学生?如果有10种类型的学生?100种?

答案是可以的。下面仅以教普通学生和大学生为例:

以下代码共5个文件5个类,包含一个课程类,一个老师类,一个学生类,一个大学生类和一个主类。我已经标上注释以便理解:

课程类Subject.java:

package classroom;

public class Subject {
	public String name;// 姓名属性
	public int time;// 课时属性
	public int score;// 学分属性
}

老师类Teacher.java:

package classroom;

public class Teacher {
	public String name;

	public void teach(Student stu, Subject sub) {
		System.out.println(name + "正在教" + stu.getName() + "学习" + sub.name);
		stu.study(sub);
	}
}

学生类Student.java:

package classroom;

public class Student {
	private String name;// 姓名属性
	int age;// 年龄属性
	protected char sex;// 性别属性
	public int score;// 学分属性
	public int time = -1;// 剩余的课时时间,定义为负数方便初始化

	// 定义设置姓名属性值的方法
	public void setName(String n) {
		name = n;
	}
	// 定义获取姓名属性值的方法
	public String getName() {
		return name;
	}
	// 定义学习课程对象的方法
	public void study(Subject sub) {
		// 减少课程的课时
		if (time < 0)
			time = sub.time;
		if (time > 0) {
			time--;
			System.out.println(name + "正在学习" + sub.name + "课程,剩余的课时是" + time);
			// 判断课程的课时是否被学完了
			if (time <= 0) {
				score += sub.score;// 学生的学分要加上课程的学分。
				System.out.println(name + "已经学完了" + sub.name + "课程," + name
						+ "现在的学分是" + score);
				time = 0;
			}
		}
	}
}

大学生类UNStudent.java:

package classroom;

public class UNStudent extends Student {
	public String number;// 学号属性

	// 玩的方法
	public void play() {
		System.out.println(getName() + "学完了,正在玩游戏!");
	}
	// 重写父类中的学习课程对象的方法
	public void study(Subject sub) {
		if (time < 0)
			time = sub.time;
		if (time > 0) {
			time -= 2;
			System.out.println(getName() + "正在学习" + sub.name + "课程,剩余的课时是"
					+ time);
			// 判断课程的课时是否被学完了
			if (time <= 0) {
				score += sub.score;// 学生的学分要加上课程的学分。
				System.out.println(getName() + "已经学完了" + sub.name + "课程,"
						+ getName() + "现在的学分是" + score);
				time = 0;
			}
		} else {
			play();
		}
	}
}

主类Manager.java:

package classroom;

public class Manager {
	public static void wait(int i) {// 等待i秒
		try {
			Thread.sleep(i * 1000);// 1000代表1秒
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		Subject sub = new Subject();
		sub.name = "英语";
		sub.score = 3;
		sub.time = 6;

		// 实例化UNStudent类的对象
		UNStudent un = new UNStudent();// 大学生张三
		un.age = 20;
		un.score = 15;
		un.sex = '男';
		un.setName("张三");
		un.number = "2016090001";

		Student stu = new Student();// 普通学生李四
		stu.age = 20;
		stu.score = 10;
		stu.sex = '男';
		stu.setName("李四");

		Teacher t = new Teacher();
		t.name = "张老师";

		int temp = sub.time;
		while (temp > 0) {
			un.study(sub);// 大学生开始自学
			wait(2);
			t.teach(un, sub);// 老师教大学生学
			t.teach(stu, sub);// 老师教普通学生学
			wait(2);
			temp--;
		}
	}
}

运行后得到的结果为:

以上,便是我对类的继承相关知识与概念的理解和概括。欢迎大家在评论里讨论!

Java 学习之路 类的继承 文章目录类的继承直接继承间接继承 类的继承 继承是面向对象三大基本特征之一,是实现软件重复的重要手段,Java的继承是每个子类只有一个直接父类! Java的继承是通过 extends 关键字来实现的,直线继承的类是子类,被继承的是父类,有的被称为基类、超类。父类和子类的关系,我就用 上上篇 中的两只15吨重的猫来举例,黄上 和 红桃 它们的属性是猫,所以是,黄上 和 红桃 它们继承自猫,猫是父... 阅读详情

相关推荐

电子结构设计(EMD)十年知识总结

客官,你的面相是做结构设计的奇才~1. 材料选择【一出手的0.1s就败了】2. 钣金件设计【折来折去有啥难】3. 塑胶件设计【看着好复杂】4. 型材件设计【凭啥不让我设计】5. 电子结构(PCBA)设计【静电肿么要我背锅】6. 包装设计【要的就是金玉其外,败絮其中】7. 外观(工业)设计【好不好看,谁说了算】8. 标签设计【】9. 标准件选择【一个螺丝难倒英雄汉/提起螺丝,英雄气短】10. 计算仿...

wfeng86的博客 1569

Java中级-面向对象-继承(extends)

Java中级-面向对象-继承

m0_60509400的博客 1506

直击痛点:VS2015离线安装报错“安装包丢失或损坏”的根源分析与精准修复

本文深入剖析了Visual Studio 2015离线安装时出现“安装包丢失或损坏”报错的根本原因,指出问题核心在于安装程序固化的临时路径查找逻辑。文章提供了一步到位的精准修复方案,通过将ISO镜像中的完整packages文件夹复制到安装程序指定的临时路径,即可无需联网、无需操作证书直接解决问题,并对比分析了其他常见方法的局限性。

weixin_27734811的博客 357

面向对象----继承(extends)

继承 让类与类之间产生关系,子父类关系。public class 子类 extends 父类 {} 好处 提高了代码的复用性 提高了代码的维护性 让类与类之间产生了关系,是多态的前提 弊端 类的耦合性增强了 开发原则:高内聚,低耦合 内聚:就是程序自己完成某某件事的能力 耦合:类与类之间的关系 Java中继承的特点 Java中只支持单继承,不支持多继承(一个儿子只能有一个爹) ...

汐小旅Shiory 610

速腾R128雷达+海康全景相机ROS数据采集避坑实录:从‘雷达不转’到MATLAB标定的完整流程

本文详细记录了速腾R128激光雷达与海康威视全景相机在ROS环境下的数据采集与MATLAB标定全流程。从硬件配置的常见陷阱(如雷达旋转参数设置)、驱动编译的依赖管理,到多传感器同步的实战技巧和MATLAB标定方法,提供了完整的避坑指南和技术方案。特别针对RoboSense R128雷达和海康相机的特殊需求给出了具体解决方案。

weixin_28717807的博客 1221

fNIRS 公开数据集整理

关注“心仪脑”查看更多脑科学知识的分享。 关键词:数据整理、fNIRS 之前我们向大家推送了 Public Neuroscience Dataset 系列主题的第一期:《EEG公开数据集》,我们同时意识到大家对于神经科学公开数据集的需求。本期是该系列主题的第二期,我们在延续第一期初衷的基础上,整理了功能性近红外光谱(fNIRS)技术的公开数据集。 fNIRS 是一种非侵入性、便携且价格低廉的光学神经成像技术,它具有可观的空间和时间分辨率。因fNIRS技术问世较EEG晚了许多,所以应用此技术开展研究发.

psybrain的博客 4272

Java基础学习系列--(三)彻底搞懂JAVA的继承概念(extends)

目标:封装的概念回顾 面向对象的三大特征:封装,继承,多态。 特征:就是特点 是Java语言的风格,是我们在开发中必须遵循的,即使毫无意义,代码还是要按照这个风格写!!! 封装的作用: 1.可以提高安全性 2.可以实现代码的组件化 封装的规范: 1.建议成员变量私有化,用private 修饰 private修饰的方法,成员变量,构造器等只能在本类直接访问。 2.提供成套的getter+setter..

*** 棋了个怪_Rachel *** 1035

浅谈迪杰斯特拉(Dijkstra)算法和A*算法原理及实现

迪杰斯特拉(Dijkstra)算法和A*算法的原理及实现。

Guo_Zhanyu 9600

【继承】简单的public class A extends B 的java文件

简单的publicclassAextendsB的java文件。

m0_51011320的博客 1640

【Mode Management】AUTOSAR架构下RH850-F1KM芯片深度休眠配置实践

AUTOSAR架构下RH850-F1KM芯片深度休眠配置实践

qq_36056498的博客 1091

BoT-SORT实战:手把手教你实现BoT-SORT训练和测试

文章目录摘要1、数据准备2、配置BoT-SORT环境2.1、获取代码2.2、创建虚拟环境2.3、安装必要的包2.3.1、安装pytorch2.3.2、安装cython2.3.3、安装Cython-bbox2.3.4、安装faiss2.3.5、安装其他的包3、训练3.1、生成REID数据集3.2、预训练模型3.2.1、ByteTrack预训练模型3.2.2、REID预训练模型3.3、开始训练4、如何更改FASTREID的BackBone?5、测试5.1、测试视频5.2、测试摄像头5.3、多类别测试 摘要 Bo

m0_47867638的博客 2298

java中的继承 (extends) 详解

继承(extends) 1. 父类与子类 父类也叫基类、超类 子类也叫派生类 在继承的而关系中,“子类就是一个父类“。也就是说,子类可以被当做父类来看待。例如父类是员工,子类是老师,那么我们可以说**”老师就是一个员工“**。 关系是“is - a”,例如“老师 is a 员工” 2. 继承的格式 2.1 定义父类的格式:(一个普通的类定义) public class 父类名称...

阿福呀 10万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

java中类的继承详解。

前言继承是面向对象的三大特征之一. 也是实现软件复用的重要手段. Java继承具有单继承的特点, 每个子类只有一个直接父类.继承的特点Java的继承通过extends关键字实现. 实现继承的类被称为子类. 被继承的类被称为父类. 父类和子类的关系, 是一种一般和特殊的关系. 例如水果和苹果的关系, 苹果继承了水果, 苹果是水果的子类, 水果是苹果的父类.Java里子类继承父类的语法格式如下:修饰符...

yeqiuBOke的博客 3万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

01.Java父子类继承详解

本文介绍了Java继承的核心概念和特点。主要内容包括:1)继承基本语法(extends关键字)和单一继承原则;2)继承的四大特点:子类继承父类非私有成员、super关键字使用、方法重写(@Override)和多态(父类引用指向子类对象);3)补充特性如final限制、构造函数继承规则和方法重写与重载区别;4)代码初始化顺序。文章强调继承是Java三大特性之一,通过大量代码示例演示了继承的实现方式和使用场景,为初学者提供了理论基础和实践指导,建议通过反复练习掌握继承的应用。

wenlan_859122329的博客 3029

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java 继承的写法_Java 类的继承详解

/*文章中用到的代码只是一部分,需要完整代码的可通过邮箱联系我1978702969@qq.com*/在面向对象的语言中如C++和JAVA,都有一个比较重要的机制——类的继承。这里将对JAVA中的类的继承机制进行讨论。先提一个问题:为什么要使用继承(后面再解答)。1.首先是类继承的写法:继承的关键字:extends格式:public class 类名(子类、派生类、超类) extends 类名(父...

weixin_30357183的博客 1万+

Java-继承-定义Student类继承于Person类

书接上回:此回继承、方法覆盖和super关键字

2301_80682565的博客 4347

JAVA的继承:类继承与接口继承

本文介绍了Java中的继承机制,主要包括类继承和接口继承。引申讲解了方法重写、抽象类以及常用的接口和使用方法

2402_87387515的博客 999

Java中类的继承

在本文中,我们将探讨Java中类的继承的基本概念和语法。我们将了解如何定义父类和子类,如何通过关键字extends建立继承关系,以及继承所带来的好处。我们还将讨论方法重写、访问修饰符和类型转换等相关主题,以加深对类继承的理解。提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

weixin_73541770的博客 2277

Java类与类的继承关系详解

代码中创建的类,主要是为了能将我们生活中的事物抽象成具体的属性和方法,但是在实际的场景中,有很多东西他们之间存在**有一定关联**的属性和方法,例如动物之间,城市之间等,他们存在有完全相同意义的属性和方法,所以遇到这种情况,我们可以设计一个类,让其他的类继承他的部分属性及方法。

LCW0102的博客 3684

java继承两个类_Java:类与继承

对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础。抽象、封装、继承、多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点,今天我们就来了解一些类与继承的相关知识。首先,我们讲述一下与类的初始化相关的东西,然后再从几个方面阐述继承这一大特性。以下是本文的目录大纲:一.你了解类吗?二.你了解继承吗?三.常见的面试笔试题若有不正之处,请多多谅解并欢迎批评指正。一.你了解类吗?在Ja...

weixin_34835470的博客 3327

JAVA语言-类的继承详解

由于设计不好,或者因场景需要,子类和父类中可能会存在相同名称的成员,如果要在子类方法中访问父类同名成员时,该如何操作?总结:成员方法没有同名时,在子类方法中或者通过子类对象访问方法时,则优先访问自己的,自己没有时再到父类中找,如果父类中也没有则报错。说明变量名相同时,子类会优先调用子类的成员变量。通过子类对象访问父类与子类中不同名方法时,优先在子类中找,找到则访问,否则在父类中找,找到则访问,否则编译报错。当子类和父类存在相同的变量名的时候,子类访问的是子类的成员变量还是父类的成员变量呢?

NoobNo2的博客 1184

【Java特性】 继承详解——单继承、多层继承、重写与 Object 类

本文详细介绍了 Java 中的继承特性。首先指出 Java 只支持单继承,不允许多重继承,但多个类可继承同一父类且支持多层继承,明确了子类和父类的相对概念。接着阐述了子类重写父类方法的注意事项,包括不能使用更严格的访问权限。介绍了 super 关键字在调用父类成员变量、成员方法和构造方法时的用法及注意点,强调在定义类时若有有参构造方法最好再显式定义无参构造方法以避免被继承时出错。

2303_76696898的博客 4740

java中类的继承

1.面向对象最重要的特点之一,就是可以实现对类的复用。2.通过“继承”一个现有的类,可以使用已经定义的类中的方法和变量。3.类的方法和属性可以被继承,但是类的构造器不能被继承。4.在Java中,一个类只能继承继承一个父类,这种方式叫做单继承。这一点和C++不一样。5.java.lang.Object类是所有类的父类虽然一个类只可以继承一个父类,但是一个父类却可以被多个子类所继承。从子类的角度看,它

玻璃屋 5252

Java中类的继承(详解)

(2)、如果子类没有定义构造方法,则它将继承父类无参构造的构造方法作为自己的构造方法;如果子类定义了构造方法,则在创建子类对象时,将先执行来自继承父类的无参构造方法,在执行自己的构造方法。如果子类声明了与继承父类同名变量,那么父类的这个变量在子类将不负存在,此时称子类变量隐藏了父类的变量。如果子类重写了从父类继承的方法,那么父类的这个方法在子类将不负存在,此时称子类方法覆盖了父类的方法。通过继承和调用父类的构造方法,我们可以在子类中实现属性的初始化,减少复写、提高代码的利用利用率。

weixin_60625208的博客 2287
上一篇: Java关于简易数据单链表的实现
下一篇: java详解第一章:类与对象
thdgth
博客等级 码龄10年 123粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值