`
miman2008
  • 浏览: 38113 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

子类继承或重写父类的方法

SUN 
阅读更多

本文仅讨论子类能否重写父类的方法,一旦重写成功,子类调用的时候是会覆盖父类的方法的。

子类重写父类方法的时候有两个考虑:

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();
		}

	}

}

 

 

分享到:
评论

相关推荐

    java子类重写父类的方法.doc

    子类可以重写父类的方法,以改变或扩展父类的行为。但是,子类重写父类的方法需要遵守一定的规则,以避免编译器错误和运行时异常。 A. 重写规则之一:重写方法不能比被重写方法限制有更严格的访问级别 Java 中,...

    java 子类对象赋值给父类对象的使用

    1. **方法覆盖**:当子类继承父类并重写父类中的方法时,通过父类引用调用该方法,将执行子类中的版本。这是多态性的一种体现。 2. **构造器与初始化**:子类对象在创建时会先调用父类的构造器,确保父类的状态得到...

    Java编程关于子类重写父类方法问题的理解

    Java编程关于子类重写父类方法问题的理解 Java编程中,子类重写父类方法是非常重要的概念之一。子类重新实现父类的方法称为重写,重写时可以修改访问权限修饰符和返回值,但方法名和参数类型及个数不能修改。只有...

    WPF继承_子类继承父类,实现跨类调用方法

    在Windows Presentation Foundation (WPF) 中,继承是面向对象编程的一个关键特性,它允许子类继承父类的属性、字段和方法,以便扩展或重写它们。标题“WPF继承_子类继承父类,实现跨类调用方法”表明我们将讨论如何...

    C#中子类重写父类的方法

    在C#编程语言中,子类继承父类是一种常见的面向对象特性,它允许子类获取父类的属性和方法,并可以扩展或修改这些特性。本文将深入探讨C#中子类如何重写父类的方法,以及这种方法在实际编程中的应用。 ### 1. 继承...

    Python子类继承父类构造函数详解

    ### Python子类继承父类构造函数详解 在Python面向对象编程中,继承是一个非常重要的概念。通过继承,一个类(称为子类)可以从另一个类(称为父类或基类)继承属性和方法。继承不仅可以提高代码的复用性,还可以...

    论JAVA继承机制中父类与子类的关系

    文章围绕子类继承父类成员的过程、成员变量及方法的赋值、重写、覆盖等问题展开讨论,旨在帮助读者更好地理解Java继承中的重点与难点。 #### 关键词 - 继承机制 - 父类 - 子类 #### 一、超类的属性或方法在继承...

    圣诞树代码编程python-23-子类重写父类同名属性和方法.ev4.rar

    当我们说“重写”,意味着在子类中定义一个新的同名属性或方法,来替代父类中的原有实现。 在Python中,当我们创建一个子类并定义一个与父类同名的方法时,这个子类的方法将覆盖父类的同名方法。例如,如果父类有一...

    java中的继承(子类调用父类构造方法还不懂).doc

    在 Java 中,使用 `extends` 关键字可以实现继承关系,子类可以继承父类的属性和方法,并可以重写父类的方法。使用 `super` 关键字可以引用父类的成分,访问父类中定义的属性和方法。 在 Java 中,可以使用多态性来...

    将子类引用赋给父类对象时,java虚拟主机并没有将那些非继承成员丢弃

    然而,这并不意味着在转换过程中会丢失子类的非继承成员,即那些在父类中不存在的方法或属性。Java虚拟机(JVM)在内存中以特定方式存储这些成员,使得它们在需要时依然可以访问。 首先,理解Java中的类继承关系。...

    子类调用抽象父类.zip

    本主题围绕“子类调用抽象父类”展开,我们将深入探讨抽象类、子类继承、抽象属性以及如何在子类中重写父类的方法。 首先,让我们理解什么是抽象类。在Java、C#等面向对象编程语言中,抽象类是一种特殊的类,它不能...

    Java编程子类能否重写父类的静态方法探索

    Java编程子类能否重写父类的静态方法探索 Java 编程中,子类能否重写父类的静态方法是一个值得讨论的问题。通过实例探索,我们可以了解到父类的静态方法可以被子类继承,但是不能重写。 首先,我们来看一下父类的...

    JS在子类中用Object.getPrototypeOf去调用父类方法

    当我们谈论子类与父类(也称为基类)的关系时,继承机制允许子类继承父类的属性和方法。在某些情况下,我们需要在子类中调用父类的方法,以便于扩展或覆盖原有功能。这里我们将深入探讨如何使用`Object....

    java 类的继承 基础理解

    2. 方法的重写:子类继承父类的方法,需要重写父类中的方法以符合新的需求。 3. 对象的实例化:可以使用父类的对象名来实例化子类,例如 `Car myCar = new CarBrand()`。 在 Java 中,继承是实现代码重用和继承关系...

    Python实现子类调用父类的方法

    继承父类后,就能调用父类方法和访问父类属性,而要完成整个集成过程,子类是需要调用的构造函数的。 子类不显式调用父类的构造方法,而父类构造函数初始化了一些属性,就会出现问题 如果子类和父类都有构造函数,...

    用类的继承关系(重写父类的方法)实现简易后台代码模板

    在子类中,我们可以重写父类的`DataRefresh`和`grid_Init`方法。在`Child`类中,`DataRefresh`方法被用来改变数据源,假设我们从数据库中获取特定条件(如年份和月份)的日志数据。`grid_Init`方法则被重写以调整...

Global site tag (gtag.js) - Google Analytics