class A{ public void tt(){} } class B extends A{ public int tt(int num){} } 这样也算是重载
重载 同一个CLASS中相同具有函数名,不同参数类型或者不同参数列表的现象。好处函数可以复用 public void a(){ } public void a(int a){ } public void a(int a,int b){ } public String a(String c){ return ""; } 返回值不同构不成重载 public void a(int a){ } public String a(int a){ } 会报错 不同CLASS中通过extends方式 把父类中方法继承过来 相当于 是子类的方法了,所以跟同一个CLASS得情况相同。 class A{ public void tt(){} } class B extends A{ public int tt(int num){} }
class B extends A{
public void tt(){
}
}
这样是方法的重构了,楼主那样写不是重载也不是重构。
public void tt(){}
}
class B extends A{
public int tt(int num){}
} 这样也算是重载
同一个CLASS中相同具有函数名,不同参数类型或者不同参数列表的现象。好处函数可以复用
public void a(){
}
public void a(int a){
}
public void a(int a,int b){
}
public String a(String c){
return "";
}
返回值不同构不成重载
public void a(int a){
}
public String a(int a){
}
会报错
不同CLASS中通过extends方式
把父类中方法继承过来 相当于 是子类的方法了,所以跟同一个CLASS得情况相同。
class A{
public void tt(){}
}
class B extends A{
public int tt(int num){}
}
class A{
public void tt(){}
}
class B extends A{
public int tt(){
return 2;}
} 同一个类如果两个方法的名字相同,即使返回类型不同,也要保证参数不同,因为返回类型不参与比较。
想这样就会报错的!
从父类继承的方法还是属于本类啊至于可见性,是可以这样理解:
同类两个方法同名不同参一个private一个public
那么在本类中调用该方法会产生重载,而在本类之外调用就不会产生重载(因为private的你根本调用不了)
成员按照类别区分为属性(Attribute)和行为(Method)此处属性省略不说,单说行为
一个行为/方法,唯一区分的标志,方法名+参数列表也就是说,同名但不同参的方法,充其量是他们的名字碰巧一样而已。并没有什么实质性的关联。所以本类里面可以重载,子类也可以重载父类方法,并且返回值啊,异常啊什么的都没有约束。应为是不同的方法。而覆盖或者称重写却不一样,因为同名又同参,所以,在一个类里面是不可能出现的,只有子类去覆盖父类的某一个方法。此时子类的方法必须要符合(最起码是兼容)父类中方法的申明,也即,返回值,异常不扩大化,访问控制符不更封闭化。否则,父类里申明了一个方法是公开的,子类给封闭了,根据子类可以当父类看待的原则,这样就是挂羊头卖狗肉了,返回值和异常也类同。虚拟机调用方法的时候存在一个从自身开始向上回溯的过程,如果当前类中有此方法,就用,没有就搜其父类,一直到Object,再搜不到就报NoSuchMethod。
如果子类有一个方法跟父类同名同参,那么搜到子类的该方法就会直接使用,而父类的方法依然存在,只是不会被搜到了,因此叫覆盖。PS:覆盖 != 替换。