从头开始学java-继承

SpringBoot继承JWT token实现权限的验证(从头开始) 在开发后端接口时,数据的直接暴露可能会导致安全问题。为了应对这种情况,我们需要在访问接口时进行拦截验证,以确保只有经过身份验证的用户才能访问数据。为实现这一目的,我们需要编写一个拦截器,用于检查每次请求中是否携带有效的token(即身份验证令牌)。只有当用户携带有效token时,才能进行数据访问操作;否则,将对请求进行拦截并禁止访问敏感数据。通过编写拦截器实现身份验证,我们能够提高系统的安全性并保护数据免受未经授权的访问。这种做法有助于规避潜在的安全风险,有效保障系统的信息安全。 阅读详情



一.继承的概念


继承就是字面的理解就好,子继承父的一些特性,并且还可能发生一些“基因突变”,可以包含一些父类没有的方法或者属性。正所谓“青出于蓝而胜于蓝”。

为什么要用继承呢?一方面继承可以向上抽取父类,使代码重用率提高。比如Teacher类和Student类都可以继承person类,另一方面继承可以引出多态,是面向对象的重要特性。


一个例子:

class Person
{
	String name;
	Person(String name)
	{
		this.name = name;
		System.out.println("Person is Constructed");
	}
	public void eat()
	{
		System.out.println("I am a person. I can eat!");
	}
}

class Student extends Person
{
	String num;//学号
	Student(String num,String name)
	{
		//调用父类构造函数
		super(name);
		
		this.num = num; 
		System.out.println("Student is Constructed");
	}
	public void study()
	{
		System.out.println("I am a student. I can sutdy");
	}
}


public class InheritsTest1 {
	public static void main(String[] args)
	{
		//创建一个学生对象
		Student student1 = new Student("zhang","111");
		//调用父类的吃饭方法
		student1.eat();
		//调用学习方法
		student1.study();
		
	}
	
}

输出的结果如下:


要点:

1.继承的语法  class 子类  extends  父类 {}

2.子类自动拥有父类public 和protected的成员。

3.关于权限问题:

  public 外界可以无限制访问  

private类外不可访问,只能类内部访问

protected 继承的子类可以访问(在不同的包中也可以) 

default即没写权限,默认同一包中的类可以访问。

4.super()调用父类的构造函数,这句话需要在子类构造函数中作为第一句话!!!


二.子类与父类间方法的关系


子类与父类中方法之间有几种关系,第一种就如上面的例子,子类直接继承父类的方法,不进行改变,可以直接调用父类的方法,子类也可以对父类的方法进行扩充,即增加新的方法。如person会eat,student继承了person类,他也会eat,但是又增加了study方法。


后两种关系都发生在子类的方法和父类重名的情况下。


1.子类覆盖父类的方法

例子:

class Person
{
	String name;
	Person(String name)
	{
		this.name = name;
		System.out.println("Person is Constructed");
	}
	public void eat()
	{
		System.out.println("I am a person. I can eat 饭!");
	}
}

class Student extends Person
{
	String num;//学号
	Student(String num,String name)
	{
		//调用父类构造函数
		super(name);
		
		this.num = num; 
		System.out.println("Student is Constructed");
	}
	public void eat()
	{
		System.out.println("I am a student .I can eat 脑白金");
	}
	public void study()
	{
		System.out.println("I am a student. I can sutdy");
	}
}


public class InheritsTest1 {
	public static void main(String[] args)
	{
		//创建一个学生对象
		Student student1 = new Student("zhang","111");
		//覆盖了父类的eat饭方法,调用子类的eat脑白金方法
		student1.eat();
		//调用学习方法
		student1.study();
		
	}
	
}
结果:


可见,子类覆盖了父类的方法。在调用子类的时候,调用eat方法,执行的不是父类的“eat饭”方法,而是子类的"eat脑白金"方法。



2.子类重载父类的方法


class Person
{
	String name;
	Person(String name)
	{
		this.name = name;
		System.out.println("Person is Constructed");
	}
	public void eat()
	{
		System.out.println("I am a person. I can eat 饭!");
	}
}

class Student extends Person
{
	String num;//学号
	Student(String num,String name)
	{
		//调用父类构造函数
		super(name);
		
		this.num = num; 
		System.out.println("Student is Constructed");
	}
	public void eat(String food)
	{
		if (food.equals("naobaijin"))
		System.out.println("I am a student .I can eat 脑白金");
	}
	public void study()
	{
		System.out.println("I am a student. I can sutdy");
	}
}


public class InheritsTest1 {
	public static void main(String[] args)
	{
		//创建一个学生对象
		Student student1 = new Student("zhang","111");
		//调用父类的eat饭方法
		student1.eat();
		//调用子类重载的eat脑白金方法
		student1.eat("naobaijin");
		//调用学习方法
		student1.study();
	}
	
}

结果如下:


这样student既可以吃饭,也可以吃脑白金,不同就在与eat方法接受的参数不同,如果是没有参数,那么他就执行父类的eat饭方法,如果有参数,那就执行子类重载的eat脑白金方法,吃脑白金。



要点:

1.子类和父类之间的方法关系有扩充关系(直接调用父类方法或者扩充新方法),覆盖关系(子类与父类方法重名,子类方法覆盖父类方法),重载关系(子类方法与父类方法参数不同,调用时根据参数选择调用哪个方法)

2.覆盖时不能覆盖静态方法,也不能覆盖final方法。

3.覆盖方法的允许访问范围不能小于原方法,覆盖方法抛出的异常不能比原方法多。

4.在子类中可以调用父类的方法,被覆盖的也可以。即用super关键字

例子如下:

class Person1
{
	public void eat()
	{
		System.out.println("I am a person. I can eat 饭!");
	}
}

class Student1 extends Person1
{
	public void eat()
	{
		//在子类中可以使用super关键字调用父类的方法,包括被覆盖的方法
		super.eat();
		System.out.println("I am a student .I can eat 脑白金");
	}
	public void study()
	{
		System.out.println("I am a student. I can sutdy");
	}
}


public class InheritsTest2 {
	public static void main(String[] args)
	{
		//创建一个学生对象
		Student1 student1 = new Student1();
		//调用子类的eat方法
		student1.eat();
	}
	
}

结果:



三.final关键字与Object类


final关键字是java中用的很多的一个修饰词,大致可以根据字面理解,最终,就是不变的意思。
关于final有这几种用法:

1.final修饰的类不可以被继承,即“只读”的不可变类,防止在继承的时候随意修改类。eg: final class 类名{}
2.final修饰的方法不可以被覆盖。 final 返回值 方法名(){}
3.final修饰的变量不可以修改,即常量。通常用大写字母 eg:MAX_VALUE

关于Object类,它是java中所有类的基类。如果一个类没有继承其他的类,那么它默认继承Object类。Object类提供了若干方法,我们之前也用过一些
诸如toString(),equals()方法。




Java 三大特性之——继承 继承(inheritance)是面向对象的重要概念。继承是除组合(composition)之外,提高代码重复可用性(reusibility)的另一种重要方式。我们在组合(composition)中看到,组合是重复调用对象的功能接口。我们将看到,继承可以重复利用已有的类的定义。 类的继承         我们之前定义类的时候,都是从头开始,详细的定义该类的每一个成员。比如下面的Human 阅读详情

相关推荐

sift、surf、orb 特征提取——三维重建

参考文章:[sift、surf、orb 特征提取及最优特征点匹配] 最近刚刚入门三维重建,在SFM算法的代码中注意到了feature_type( feature extraction method)这个参数,想细致了解一下这几种特征提取算法,在这里做一下笔记。 SIFT 简介 SIFT(Scale-Invariant Feature Transform)——尺度不变特征变换,是一种计算机视觉的特征提取算法,用来侦测与描述图像中的局部特征。 实质上,它是在不同的尺度空间上查找关键点(特征点),并计算出关键点的

bb_sy_w的博客 4362

Java构造函数之调用父类构造函数

子类可以通过super关键字来显式地调用父类的构造函数。 当父类没有提供无参数的构造函数时,子类的构造函数中必须显式的调用父类的构造函数; 如果父类提供了无参数的构造函数,此时子类的构造函数就可以不显式的调用父类的构造函数,默认调用父类的无参构造函数。 package com.bjut.StudyTest; class Person { public Person() { Syste

努力做一名优秀的程序员 1万+

经典烧脑算法逻辑题--高楼扔鸡蛋:最少次数测出鸡蛋摔碎临界点。

如果在第2层没碎,换到第3层扔.......如果第59层没碎,换到第60层扔;有2个鸡蛋,从100层楼上往下扔,以此来测试鸡蛋的硬度。比如鸡蛋在第9层没有摔碎,在第10层摔碎了,那么鸡蛋不会摔碎的临界点就是9层。因此,我们尝试每10层扔一次,第一次从10层扔,第二次从20层扔,第三次从30层......一直扔到100层。如果第一枚鸡蛋,在50层碎了,第二枚鸡蛋,就从第1层开始扔,一层一层增长,一直扔到第49层。如果第一枚鸡蛋在50层没碎了,则继续使用二分法,在剩余楼层的一半(75层)往下扔。

借雨醉东风的博客 1818

子类覆盖父类方法时参数以及方法的访问权限问题

子类覆盖父类方法时方法参数必须与父类一致

fanluwei_jack的专栏 1605

【亲测】ubuntu20.4 安装CUDA11.8

一步一步搭建C++ CUDA CUDNN TENSORRT OPENCV DNN ONNXRUNTIME推理环境

weixin_40950590的博客 3896

智能车数字图像处理算法入门及C语言实现

智能车图像的最最基本入门算法介绍及C语言实现,二值化 - 特征识别 - 补线 - 中心巡线 - 偏差曲率计算。

不想随波逐流的大学生一枚,我们每个人都在努力奔跑 5110

方法覆盖与方法重载的区别

方法覆盖要求参数列表保持一致;方法重载的参数列表必须不一致 方法覆盖的返回数据类型必须一致;方法重载木得要求 方法覆盖只适用于父类和子类之间;方法重载适用于子类和父类内部,或者父类和子类之间 方法覆盖在访问权限和异常抛出方面有限定;方法重载木得任何限定 方法覆盖针对一个父类方法只能被子类覆盖一次;方法重载针对一个方法可以被多次重载 ...

Moliay的博客 1万+

【用unity实现100个游戏之7】实现一个类《杀戮尖塔》的卡牌回合制游戏(附项目源码)

【用unity实现100个游戏之7】实现一个类《杀戮尖塔》的卡牌回合制游戏(附项目源码)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1万+

Java中方法覆盖的基本使用

回顾一下方法重载: 1.什么时候考虑使用方法重载overload? 答:当在一个类中,如果功能相似的话,建议将名称定义成一样,只是参数列表(个数,顺序,类型)不同,这样代码美观,且方便编程。 2.什么条件构成方法重载overload? 答:(1)同一个类当中;(2)方法名相同;(3)参数列表不同(个数,顺序,类型) 1.什么时候我们会考虑使用“方法覆盖”呢? 子类继承父类之后,当继承过来的方法无法满足当前子类的业务需求时,子类有权利对这个方法进行重新编写,又叫“方法的覆盖”。 方法覆盖又叫做:方法重写,英文

pipizhen_的博客 3073

Coze智能体开发:开始使用扣子

扣子全新升级!它不仅能帮你办公、做视频、写代码,更具备自主任务执行、探索进化等能力,真正从“陪你聊”走向“帮你干活”。

王国平的博客 125

在 Android Studio 中接入 DeepSeek:加速 Android 开发进程

通过在 Android Studio 中接入 DeepSeek,Android 开发者能够充分利用人工智能技术带来的强大优势,显著提升开发效率和代码质量。从前期的安装准备,到具体的接入步骤,再到使用过程中的技巧和注意事项,每一个环节都为打造高效、智能的开发环境提供了有力支持。希望本文能帮助你顺利将 DeepSeek 融入到 Android Studio 的开发工作流程中,让你在 Android 开发的道路上更加得心应手,创造出更优质的 Android 应用。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 4175

【从头开始学Java】Java的继承(枚举、反射)

五、参数数量可变的方法 在Java中使用省略号...的形式来创建参数数量可变的方法。 public static double max( double... values); 调用方式:1> max(3.1, 40.4,-5); 2>也运行将一个数组传递给可变参数方法的最后一个参数。 注:因此,可以将已经存在且最后一个参数是数组的方法重新定义为可变参数的方法,而不会破

◇″淡定。 1636

微信小程序 - 最新获取用户昵称 / 头像(wx.getUserProfile 接口被废弃后的代替方案)详细教程,2022 年之后的所有微信小程序,获取用户信息最新详细教程,附带示例源代码

微信小程序wx.getUserProfile接口废了用什么代替,微信小程序wx.getUserProfile不能用了怎么办,wx.getUserProfile失效有什么替代方案吗,微信新规定头像昵称填写最新教程,目前微信小程序最新获取用户头像昵称教程,微信小程序用户头像昵称获取规则调整公告,2022改版后的微信小程序如何获取用户头像和昵称信息,微信小程序官方废弃getUserProfile后如何实现获取用户信息,微信小程序wx.getUserProfile接口返回了默认头像昵称,微信小程序获取用户信息不

🏆 前端领域优质创作者 2万+

【从头开始学JAVA】面向对象总结

【从头开始学JAVA】面向对象总结1.面向对象复习4.关于内存模型5.JAVA编码顺序:6封装7.执行顺序:构造代码块-->构造方法-->局部代码块8.this9.继承10.supe 1.面向对象复习 面向过程–思想–干活的主体是自己 面向对象–思想–干活不是自己,我们是指挥者,不论干啥,都得先创建对象 2.类–把一类事物抽象成一个类型–模板/图纸–class 3.对象–根据图纸创造出来的一个个实际的实例–new 4.关于内存模型 一共分5块,目前我们需要了解的是栈(先进后出)和堆(对象都存入堆

Memory_314的博客 193

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Java从头开始--封装、继承和多态

面向对象的三大特征 1.面向对象语言的三大特征 封装 继承 多态 封装 封装的概念 将类中的某些信息(成员变量,方法)隐藏起来,不让外部的程序直接访问,可通过专门的方法来实现对隐藏信息的操作和访问。 封装的好处 封装的具体表现 属性使用private权限 方法使用public权限 例如: public class Demo{ private String name; public String getName (){ return name; } pu

crraxx的博客 543

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

从头开始学SpringBoot—01入门&基础配置

SpringBoot系列01部分——从0创建boot工程和基础配置的使用

青春无问西东 岁月自成芳华 1012

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

从头开始学Java

1、组合的概念,写了一个class,在另一个class中引用;“has-a关系”“汽车拥有引擎” 2、继承的概念,可以写新方法或者覆盖之前的方法 3、多态 ——前期绑定,非面向对象编程,编译器产生一个具体名字的调用 ——后期绑定,面向对象编程,编译器确保被调用方法的存在,但是不知道被执行的具体代码(java代替绝对地址调用的方法:代码使用在对象中存储的信息来计算方法体的地址) java中动态绑定是默认行为,不需要添加额外的关键字实现多态 多态的三个必要条件:继承、重写、父类引用指向子类 4、J

qq_35417004的博客 167

什么是继承?Java中如何实现继承

继承的一个重要方面是多态性,它允许不同的子类使用相同的方法或属性,但以不同的方式实现它们,从而增加了代码的灵活性和可读性。例如,在动物的层次结构中,狗(Dog)是一个动物(Animal),因此可以创建一个名为Dog的类,使其继承Animal类的属性和方法。通过继承,我们可以在现有类的基础上创建新的类,这些类可以继承父类的属性和方法,同时可以添加新的属性和方法。继承的使用可以大大减少代码的重复,提高代码的可维护性和可扩展性。通过继承,子类可以继承父类的属性和方法,同时也可以重写父类的方法以适应自己的需求

2301_77769537的博客 916

从头开始学Java——重新理解Java反射

文章目录什么是反射?反射的基本运用反射的主要用途:设计模式之反射与配置文件 什么是反射? 程序中一般的对象的类型都是在编译期就确定下来的,而 Java 反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。所以我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。 反射的核心是 JVM 在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译期...

No_Game_No_Life_的博客 281

从头开始学Java——Java类型和类

文章目录

No_Game_No_Life_的博客 724

从头开始学Java——JVM虚拟机八问

文章目录什么是Java虚拟机,为什么Java被称为“平台无关的编程语言”?什么是JIT?HotSpot怎么工作的?HotSpot虚拟机要使用解释器与编译器并存的架构? 前置文章:为分布式做准备吧——JVM线程资源同步及交互机制 前置文章2:为分布式做准备吧——深入理解JVM 什么是Java虚拟机,为什么Java被称为“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程。...

No_Game_No_Life_的博客 477

java \t怎么从头开始_从头开始学习Java

java \t怎么从头开始 那么,您想用Java编程吗? 太好了,您来对地方了。 Java 101系列提供了Java编程的自指导性入门,从基础知识开始,涵盖了成为生产型Java开发人员需要了解的所有核心概念。 本系列是技术性的,其中包含大量代码示例,可帮助您在进行过程中掌握概念。 我将假定您已经具有一些编程经验,只是没有Java经验。 第一篇文章介绍Java平台,并解释其三个版本之间的区别:...

cxu0262的博客 391

Java基础——继承

学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:456544752 我们一起学Java! 继承(inheritan...

chuifuhuo6864的博客 111

Java 继承

继承(inheritance)是面向对象的重要概念。继承是除组合(composition)之外,提高代码重复可用性(reusibility)的另一种重要方式。

jy_Xiaodao的博客 159

java继承

java继承 在Java语言中,类可以从其他类派生,从而从这些类继承字段和方法。(classes can be derived from other classes, thereby inheriting fields and methods from those classes.) 定义:从另一个类派生的类称为子类(也称为派生类,扩展类或子类)。 派生子类的类称为超类(也称为基类或父类)。 除了没有超类的Object类之外,每个类都有且只有一个直接超类(单继承)。 在没有其他任何显式超类的情况下,每个类都

qq_30906791的博客 291
上一篇: 从头开始学java--String类&包装类
下一篇: 从头开始学java--抽象类&接口
puppet_master
puppet_master 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄12年 2695粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值