本文仅讨论子类能否重写父类的方法,一旦重写成功,子类调用的时候是会覆盖父类的方法的。
子类重写父类方法的时候有两个考虑:
1.父类的方法不能降级,同级的话就要覆盖,例如public方法不能在子类中被声明为protected或者private(子类重载除外),否则会有
Cannot reduce the visibility of the inherited method from Father的编译错误。
2.父类的方法可以任意升级,但升级只有两种方式,要么覆盖,要么重载,覆盖就是方法体完全一样,重载则是参数必须改变,方法名称不变。
import java.lang.reflect.Method;
class Father{
int a;
protected int b = 5;
protected void funcpro(){
//父类的保护方法,子类能够访问,但子类自身没有
System.out.println("father funcpro");
}
public void funcpub(){
//父类公有方法,子类直接继承
}
private void funcpri(){
//父类私有方法,子类不可见
}
}
public class TestOveride extends Father {
/**
* @param args
*/
//父类保护方法的重写
// public void funcpro(){
// //子类自己可以这样定义,将会覆盖父类protected方法
// System.out.println("子类的func方法");
// }
// protected void funcpro(){
// //ok
//}
// public short funcpro(){
// //illegal 父类的protected和public方法在子类中是可见的,试想一下,如果编译器认为这个方法体正确,
//那么子类调用funcpro的时候究竟调用哪个呢?这样没有能构成重载
// }
// private void funcpro(){
// //illegal
// }
private void funcpro(int a){
//这是方法重载,不会报错
System.out.println("sun funcpro");
}
//父类公有方法的重写
// private void funcpub(){
// //illegal:Cannot reduce the visibility of the inherited method from Father
// }
// protected void funcpub(){
// //illegal Cannot reduce the visibility of the inherited method from Father
// }
// public void funcpub(){
// //ok
// }
// public int funcpub(){
// //illegal 和父类的返回值不匹配
// }
// public int funcpub(int i){
// //ok 子类构成重载
// return 1;
// }
//父类私有方法的重写
// public void funcpri(){
// //ok
// }
// protected void funcpri(){
// //ok
// }
// private void funcpri(){
// //ok
// }
public static void main(String[] args) {
// TODO Auto-generated method stub
TestOveride testOveride = new TestOveride();
Class class1 = testOveride.getClass();
try {
Method[] methods = class1.getMethods();
System.out.println("子类中的所有方法:"); //可以看到,并没有父类的funcpro方法
for(Method m:methods){
System.out.println(m);
}
System.out.println("子类调用父类的protected 方法:");
testOveride.funcpro();
System.out.println("子类调用自己的func方法:");
testOveride.funcpro(1);
System.out.println("子类调用父类的字段");
System.out.println(testOveride.b);
}catch(Exception e){
e.printStackTrace();
}
}
}
分享到:
相关推荐
子类可以重写父类的方法,以改变或扩展父类的行为。但是,子类重写父类的方法需要遵守一定的规则,以避免编译器错误和运行时异常。 A. 重写规则之一:重写方法不能比被重写方法限制有更严格的访问级别 Java 中,...
1. **方法覆盖**:当子类继承父类并重写父类中的方法时,通过父类引用调用该方法,将执行子类中的版本。这是多态性的一种体现。 2. **构造器与初始化**:子类对象在创建时会先调用父类的构造器,确保父类的状态得到...
Java编程关于子类重写父类方法问题的理解 Java编程中,子类重写父类方法是非常重要的概念之一。子类重新实现父类的方法称为重写,重写时可以修改访问权限修饰符和返回值,但方法名和参数类型及个数不能修改。只有...
在Windows Presentation Foundation (WPF) 中,继承是面向对象编程的一个关键特性,它允许子类继承父类的属性、字段和方法,以便扩展或重写它们。标题“WPF继承_子类继承父类,实现跨类调用方法”表明我们将讨论如何...
在C#编程语言中,子类继承父类是一种常见的面向对象特性,它允许子类获取父类的属性和方法,并可以扩展或修改这些特性。本文将深入探讨C#中子类如何重写父类的方法,以及这种方法在实际编程中的应用。 ### 1. 继承...
### Python子类继承父类构造函数详解 在Python面向对象编程中,继承是一个非常重要的概念。通过继承,一个类(称为子类)可以从另一个类(称为父类或基类)继承属性和方法。继承不仅可以提高代码的复用性,还可以...
文章围绕子类继承父类成员的过程、成员变量及方法的赋值、重写、覆盖等问题展开讨论,旨在帮助读者更好地理解Java继承中的重点与难点。 #### 关键词 - 继承机制 - 父类 - 子类 #### 一、超类的属性或方法在继承...
当我们说“重写”,意味着在子类中定义一个新的同名属性或方法,来替代父类中的原有实现。 在Python中,当我们创建一个子类并定义一个与父类同名的方法时,这个子类的方法将覆盖父类的同名方法。例如,如果父类有一...
在 Java 中,使用 `extends` 关键字可以实现继承关系,子类可以继承父类的属性和方法,并可以重写父类的方法。使用 `super` 关键字可以引用父类的成分,访问父类中定义的属性和方法。 在 Java 中,可以使用多态性来...
然而,这并不意味着在转换过程中会丢失子类的非继承成员,即那些在父类中不存在的方法或属性。Java虚拟机(JVM)在内存中以特定方式存储这些成员,使得它们在需要时依然可以访问。 首先,理解Java中的类继承关系。...
本主题围绕“子类调用抽象父类”展开,我们将深入探讨抽象类、子类继承、抽象属性以及如何在子类中重写父类的方法。 首先,让我们理解什么是抽象类。在Java、C#等面向对象编程语言中,抽象类是一种特殊的类,它不能...
Java编程子类能否重写父类的静态方法探索 Java 编程中,子类能否重写父类的静态方法是一个值得讨论的问题。通过实例探索,我们可以了解到父类的静态方法可以被子类继承,但是不能重写。 首先,我们来看一下父类的...
当我们谈论子类与父类(也称为基类)的关系时,继承机制允许子类继承父类的属性和方法。在某些情况下,我们需要在子类中调用父类的方法,以便于扩展或覆盖原有功能。这里我们将深入探讨如何使用`Object....
2. 方法的重写:子类继承父类的方法,需要重写父类中的方法以符合新的需求。 3. 对象的实例化:可以使用父类的对象名来实例化子类,例如 `Car myCar = new CarBrand()`。 在 Java 中,继承是实现代码重用和继承关系...
继承父类后,就能调用父类方法和访问父类属性,而要完成整个集成过程,子类是需要调用的构造函数的。 子类不显式调用父类的构造方法,而父类构造函数初始化了一些属性,就会出现问题 如果子类和父类都有构造函数,...
在子类中,我们可以重写父类的`DataRefresh`和`grid_Init`方法。在`Child`类中,`DataRefresh`方法被用来改变数据源,假设我们从数据库中获取特定条件(如年份和月份)的日志数据。`grid_Init`方法则被重写以调整...