Java面向对象-细节篇1(重写,重载,this,super)
方法重载(overload)
方法名必须相同
形参类型 或 形参顺序或形参个数不同(⚡形参名不同不可认为是重载)
返回类型,无要求特定类型
public class overLoad{
public static void main(String[] args) {
Oload o=new Oload();
o.sum(1,2);
System.out.println(o.sum('A'));
}
}
class Oload{
public void sum(int a,int b){
System.out.println(a+b);
}
public char sum(char c){
return (char)(c+32);
}
}
方法重写(override)
~介绍:子类与父类有两个完全相同的方法(方法名,返回类型,参数列表);即为子类覆盖了父类方法
细节:
两个方法完全相同
public Object f1(){}; public String f2(){};
🚩当返回类型之间为父,子类关系,也满足重写(Object <- String)Object为所有类父类
public void n1(){} void n2(){}
不可缩小方法访问权限(上述反之则可)
示例
public class Override_(){
public static void main(String[] args){
Dog d=new Dog();
Cat c=new Cat();
}
}
class Animal{
public void cry(){
System.out.println("动物在呼叫。。。");
}
public Object Fson(){
⚡ //这里是父类方法,返回顶级类;是所有类的父类
}
}
class Dog extends Animal{
public void cry(){
System.out.println("狗在汪汪叫。。。");
}
}
class Cat extends Animal{
/*void cry(){
System.out.println("这里缩小了服了方法访问范围,编译报错")
}*/
public String Fson(){
⚡ //如果父类方法为String,子类方法为Object则编译报错
}
}
方法重载/重写区别:
名称 | 范围 | 方法名 | 参数列表 | 修饰符 | 返回类型 |
---|---|---|---|---|---|
重载(overload) | 本类 | 一致 | 🚩顺序,类型,个数必须有一样不同 | 不限 | 不限 |
重写(override) | 父子类 | 一致 | 一致 | 可扩大 | 可为父子类 |
this关键字详解
-
用于区分属性和局部变量
class Per{ int age; String name; public void info(int age,String name){ this.name=name; this.age=age; } }
-
访问成员方法
public void v1(int mess){ System.out.println(mess); } public void v2(){ this.v1(980); }
-
访问构造器
class Per{ int info; public Per(){ this(int messcode);//必须放在第一条 System.out.println("ok"); } public Per(int messcode){ this.info=messcode; } }
注意:this(参数列表)语法⚡只能在构造器中使用;⚡并且必须放在第一条语句
-
不可在类外使用,只能在类方法中使用
super关键字详解
~super 代表引用父类,用于访问父类属性,方法,构造器(不能访问private修饰的)
基本语法
- 访问属性:super.属性名
- 访问方法:super.方法名(参数列表)
- 访问构造器:super(参数列表)(⚡只能在构造器使用,并且置于首行)
细节
-
针对父,子类同名属性,方法:
n1; this.n1; cal(); this.cal();
先找本类再找父类super.n1; super.cal(参数列表)
⚡不会查找本类是否有该属性,方法 -
若有多个类有同名属性,方法;遵循就近原则(访问到最近的属性,若为private则编译报错)
this/super区别:(在构造器中二者只能存在一个)
关键字 | 调用属性 | 调用方法 | 调用构造器 | 起始调用位置 | 注意 |
---|---|---|---|---|---|
this | this.name | this.info() | this(形参列表) | 本类开始向上查找 | 在构造器中只能位于首行 |
super | super.name | super.info() | super(形参列表) | 跳过本类查找父类 | 在构造器中只能位于首行 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?