文章目录
前言
今天继续Java面向对象的学习,认识什么是方法重载、什么是方法重写、区别是什么?认识关键字this和super,并了解其用法。
希望能对你的学习有所帮助!
提示:以下是本篇文章正文内容,Java系列学习将会持续更新
一、方法重载
(1)基本概念
在同一个类中,方法名相同、参数列表不同的方法之间构成重载关系(Overload);
(2)重载的表现形式
方法重载的主要体现在:参数的个数不同、参数的类型不同、参数的顺序不同、方法名称要相同。
形参变量名与返回值类型无关,但是建议返回值类型最好相同。
(3)意义
方法重载的意义在于:调用者只需要记住一个方法名就可以调用各种不同的版本,从而可以实现多种类型数据的处理。
(4)案例
public class Overload {
//方法重载体现的参数个数不同
void show() {
System.out.println("这是一个没有参数的输出");
}
void show(int a) {
System.out.println(a + "是一个整数");
}
void show(int a,String c) {
System.out.println(a + "是一个整数," + c + "是字符串");
}
//方法重载体现的参数类型不同
void show(double a) {
System.out.println(a + "是一个实数");
}
void show(String c) {
System.out.println(c + "是一个字符串");
}
//main方法测试
public static void main(String[] args) {
Overload y = new Overload();
y.show();
y.show(12);
y.show(25.3);
y.show("abcde");
y.show(5, "xyz");
}
}
二、方法重写
(1)基本概念
当父类中继承下来的方法不足以满足子类需求的时候,则需要在子类中把继承下来的方法进行改造,叫做方法的重写/覆写。
(2)重写的原则
1.相同的方法名,相同的参数列表,相同的返回值类型或者返回子类(至少是向上转型)。
2.访问权限修饰符 >= 父类权限。
3.不能抛出更大的异常。
在子类重写的方法中,可以通过super关键字调用父类的“原始”方法。
父类中的静态方法(含有static修饰的方法)不属于对象层级而是类层级, 所以不能被子类继承,更不能被覆写。
(3)案例
//父类
public class Animal {
public void eat(){
System.out.println("小动物正在吃食物~");
}
}
//子类
class Dog extends Animal {
@Override
public void eat(){
System.out.println("这只修狗正在吃狗粮~");
}
}
三、关键字this
(1)要点提示
关键字this表示当前对象的引用。
对于构造方法来说,this(构造方法参数); 代表当前正在构造的对象;
对于成员方法来说,this.show(); 代表当前正在调用的对象的方法;
对于成员变量来说,this.name; 代表当前正在调用的对象的变量;
修饰属性时,如果在当前类中找不到该属性,才去父类中找。
(2)原理
由于不同的对象调用同一个方法时,在方法体的内部使用this进行记录,因此this代表的对象也就不同,当访问成员变量时候默认解析为:this.成员变量名,其中this.相当于汉语中“我的”,因此不同的类使用会有不同的结果。
(3)使用场合
a.当形参变量名和成员变量名相同的时候,在方法体的内部会优先选择变量使用,此时就需要使用this.的方式明确使用的是成员变量而不是形参变量。
b.在无参构造方法中使用this(实参)的方式可以调用本类中的有参构造;在有参构造中使用this()也是可以调用本类中的无参构造;但是不能同时互相调用,否则会形成死循环。
(3)案例
public class Boy {
private String name;
private int age;
//无参构造
Boy(){
//该this调用本类中的有参构造,实现成员变量的初始化
this("张三", 19);
}
//有参构造
Boy(String name, int age){
// this(); 调用本类的无参构造,此时不适用
//this.name指的是Boy类中的成员变量
this.name = name;
this.age = age;
}
//私有方法:信息转字符串
private String toString(){
String ret = "姓名:" + this.name + "年龄:" + this.age;
return ret;
}
//打印信息
public void show() {
//this.成员方法名调用本类中的方法
System.out.println(this.toString());
}
}
四、关键字super
(1)使用场合
关键字super表示父类对象的引用。
使用super.方式可以访问父类的成员变量和成员方法。
使用super()的方式在构造方法中的第一行表示调用父类的构造方法。
(2)案例
public class Student extends Person {
private int id;
public Student() {
super();//表示调用父类中的无参构造方法,编译器会自动添加该代码,所以可省略
}
public Student(String name,int age,String nationality,int id) {
super(name,age,nationality);//调用父类中的有参构造方法
setId(id);
}
//将父类中的show()方法进行覆写
@Override
public void show() {
super.show();//调用父类中的show()方法
System.out.println("学生学号是:" + id);
}
public int getId(){
return this.id;
}
public void setId(int id){
this.id = id;
}
}
总结
提示:这里对文章进行总结:
以上就是今天的学习内容,本文是继续Java面向对象的学习,学习了方法重载和方法重写,以及两个关键字的用法。之后的学习内容将持续更新!!!