Java方法继承、重载与覆盖详解

需积分: 17 4 下载量 42 浏览量 更新于2024-09-13 2 收藏 3KB TXT 举报
本文主要对Java中的方法继承、方法重载和方法覆盖进行了总结,旨在帮助读者理解这三种概念之间的关系和区别。 1. **Java方法继承**:在Java中,一个子类(SubBase)可以继承一个父类(Base),从而获取父类的公共、受保护或默认(包访问)成员。子类可以有自己的方法和属性,并且可以扩展或覆写父类的方法。继承是多态性的基础,使得代码可复用并实现更复杂的结构。 2. **方法重载**:在同一类中,如果存在两个或多个方法具有相同的名称,但参数列表不同(参数数量、类型或顺序不同),则称这些方法为重载方法。重载不考虑返回类型和访问修饰符,只要求方法签名(方法名和参数列表)不同。 3. **方法覆盖**:当子类继承父类时,如果子类定义了一个与父类相同名称和参数列表的方法,那么这个子类方法覆盖了父类的方法。覆盖方法必须保持或降低访问级别(如父类的public方法在子类中可变为protected或default,但不能变为private),并且不能改变抛出的异常。子类方法不能比父类方法更早返回(即子类覆盖的方法不能比父类方法少执行任何代码就返回)。 4. **super关键字**:在Java中,super用于引用父类的成员。可以通过super关键字调用父类的构造器、方法和字段。例如,子类构造器通常需要通过super()调用来调用父类的构造器。此外,如果子类覆盖了父类的方法,可以通过super.method()来调用被覆盖的父类方法。 5. **静态方法与非静态方法**:静态方法属于类,而非静态方法属于类的实例。子类可以有与父类同名的静态方法,但这不是覆盖,因为静态方法是按类型而不是按对象调用的。子类和父类的静态方法各有一份副本,调用时根据类名进行。而非静态方法在子类中可以被覆盖,通过对象调用。 示例代码: ```java class Super { static int stat = 1; int nonStat = 2; static int statMethod() { return 3; } int nonStatMethod() { return 4; } } public class Sub extends Super { static int stat = 10; int nonStat = 20; static int statMethod() { return 30; } int nonStatMethod() { return 40; } public static void main(String[] args) { Super s = new Sub(); //向上转型 System.out.println("Static is " + s.stat); //调用父类静态方法 System.out.println("Non-Static is " + s.nonStat); //调用父类非静态方法 System.out.println("Static method is " + s.statMethod()); //调用父类静态方法 System.out.println("Non-Static method is " + s.nonStatMethod()); //调用子类非静态方法,因向上转型不影响非静态方法调用 Sub sub = (Sub) s; //向下转型 System.out.println("Static is " + sub.stat); //调用子类静态方法 System.out.println("Non-Static is " + sub.nonStat); //调用子类非静态方法 } } ``` 在这个例子中,我们看到了继承、静态方法和非静态方法的使用。子类`Sub`覆盖了`Super`的非静态方法,并且静态方法并没有被覆盖,而是各自独立存在。同时,我们看到了向上转型和向下转型对调用方法的影响。