class A{
public void tt(){}
}
class B{
public int tt(int num){}
}
这样重载从A中继承的方法算不算是在同一个类中呢??
public void tt(){}
}
class B{
public int tt(int num){}
}
这样重载从A中继承的方法算不算是在同一个类中呢??
解决方案 »
- 关于学生数据修改,删除的问题,帮忙改改代码?
- 想知道spring mvc 是怎么运做的啊
- Java 怎么删除不用的组件啊?
- JVM中的本地方法以及多线程管理问题。(100分)相求!!!
- 初次使用ODBC连接数据库 出现问题 请指点(简单问题立即结帖!)
- JAVA有没有中文的帮助查找文件?
- JavaTM 中的TM是什么意思???????????
- java初学者紧急问题
- 关于在linux用vi编写java后?
- 帮忙看一下Core Java 2, Volume 1: Fundamentals, Fifth Edition
- 当一个流做为参数传入另外一个流,需要关闭吗?例如本题的fo.close();
- 跪求Java资料
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:覆盖 != 替换。