java的重写和重载
主要区别:是否继承,是否改变参数列表
方法的重载(overload)
概念:在一个类中,函数名称相同但参数不同
方法重载规则:
- 方法名必须相同
- 方法的参数必须不同(参数个数、类型)
- 返回类型可以相同也可以不同
- 只有返回值类型相同不构成重载
代码示例:
package com.base;
/**
* @Author:lkb
* @Date: 2021/10/18 12:42
*/
public class Overload {
public static void main(String[] args) {
}
//要进行重载的方法
public int printSum(int a,int b){
return a+b;
}
//重载1:参数个数不一样
public int pirntSum(int a,int b,int c){
return a+b+c;
}
//重载2:参数类型不一样,返回值类型也不一样
public double printSum(double a,double b){
return a+b;
}
//错误重载:只有返回值类型不一样,不构成重载
/*
public double printSum(int a, int b){
return a+b;
}
*/
//错误重载:只改变变量名和返回值类型
/*
public void printSum(int b,int a){
System.out.println(a+b);
}
*/
}
方法重写(override都是方法的重写,和属性无关)
- 需要有继承关系,子类重写父类
-
方法名相同,方法体不同。
方法的声明:权限修饰符 返回值类型 方法名(形参列表){
//方法体
} -
参数列表相同。
-
修饰符范围可以扩大。private < default < protected < public
-
抛出异常范围可以缩小。Exception(大) --> ClassNotFoundException
特殊情况: 子类不能重写父类中声明为private权限的方法;
-
public class B {
public void test(){
System.out.println("B==>test()");
}
}
==========================================================
public class A extends B {
@Override
public void test() {
System.out.println("A==>test()");
}
}
==========================================================
public class Application {
public static void main(String[] args) {
A a = new A();
B b = new A();
a.test();//A==>test()
b.test();//A==>test()
}
}
注意:子类与父类中同名同参数的方法必须同时声明为非static的(即为重写),或者同时声明为static的(不是重写)。
Java中,static方法是属于类的方法不是属于某个实例的方法,像static变量一样是类所共有的,在权限允许的范围内可以直接通过“类名.方法名(static方法名)”调用。
Java中的static方法是不能被子类重写的或者被子类覆盖的,因为即使被覆盖也不会实现多态的功能,所以static方法不是能不能重写,而是不根本无法实现static方法重写。
关于static方法的介绍链接:
原文链接:https://blog.csdn.net/chenming_1799701236/article/details/82428306
关于权限修饰符:
1、public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用。
2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用。父类中声明为 private 的属性或方法,子类继承父类以后,仍然认为获取了父类中私有的结构。 * 只有因为封装性的影响,使得子类不能直接调用父类的结构而已。
3、protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。
4.缺省default
修饰符 | 类内部 | 同一个包 | 不同包子类 | 同一个工程 |
---|---|---|---|---|
private | √ | |||
default | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |