Java中重写和重载与多态的关系
重写(Override)
重写指的是⼦类对⽗类可允许访问的⽅法进⾏重新编写,两者有相同的名称,相同参数,相同返回值,但是内容却不相同,⼦类的新⽅法将覆盖⽗类中原有的⽅法。
重载(Overload)
重载是在同⼀个类中,⽅法名称相同,参数不同。这样同名不同参的⽅法被称为重载。
重载VS重写
重写规则:
1、⽗类成员发放只能被它的⼦类重写
2、⼦类⽅法的访问修饰符⼀定要⼤于⽗类的访问修饰符(public>protected>default>private)。
3、⼦类和⽗类在同⼀包中,那么⼦类可以重写⽗类所有⽅法,除了声明为private和final的⽅法。
4、⼦类和⽗类不在同⼀个包中,那么⼦类只能够重写⽗类的声明为 public 和 protected 的⾮final ⽅法。
5、声明为 final 的⽅法不能被重写。
6、声明为 static 的⽅法不能被重写,但是能够被再次声明。
7、⼦类⽅法的参数列表、⽅法名称、返回值必须和⽗类⽅法⼀致
8、构造⽅法不能被重写。
9、如果不能继承⼀个⽅法,则不能重写这个⽅法。
重写⽰例:
public class Cat {
public static void main(String[] args) {
Cat cat = new Jack();
cat.name();
}
public void name(){
System.out.println("cat");
}
}
class Jack extends Cat{
public void name(){
System.out.println("jack");
}
}
重载规则:
1、被重载的⽅法必须改变参数列表(参数个数或类型不⼀样);
2、被重载的⽅法可以改变返回类型;
3、被重载的⽅法可以改变访问修饰符;
4、被重载的⽅法可以声明新的或更⼴的检查异常;
5、⽅法能够在同⼀个类中或者在⼀个⼦类中被重载。
6、⽆法以返回值类型作为重载函数的区分标准。
重载⽰例:
public class Cat {
public static void main(String[] args) {
Cat cat = new Cat ();
java重写和重载的区别cat.name();
cat.name("Jack");
}
public void name(){
System.out.println("cat");
}
public void name(String newName){
System.out.println(newName);
}
}
上⾯说完了重载与重写,下来我们需要看看什么是多态呢?还有它和重载与重写之间有什么样的关系呢?
多态
多态的概念,就是同⼀操作作⽤于不同的对象,可以有不同的解释,产⽣不同的执⾏结果。
如果按照这个概念来定义的话,那么多态应该是⼀种运⾏期的状态。
实现多态,需要三个条件:
1、即有类继承或者接⼝实现。
2、⼦类要重写⽗类的⽅法
3、⽗类的引⽤指向⼦类的对象。
更多时候,⼤部分⼈认为动态还分为动态多态和静态多态。将重载视为静态多态,因为他需要在编译期决定具体调⽤哪个⽅法、关于这个动态静态的说法,我更偏向于重载和多态其实是⽆关的。我认为,多态应该是⼀种运⾏期特性,Java中的重写才是多态的体现。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论