Java 方法重写和 Super 关键字

方法重写

在 Java 继承中,也存在着重写的概念,其实就是子类定义了和父类同名的方法。

定义:方法名称相同,返回类型相同,参数也相同。代码如下:

package hello;

class Father01{
	public void tell(){
		System.out.println("父类调用方法");
	}
}

class Son01 extends Father01{
	public void tell(){
		System.out.println("子类调用方法");
	}
}

public class Demo02 {

	public static void main(String[] args) {
		Son01 son01 = new Son01();
		son01.tell();
	}

}

 

程序输出:

子类调用方法

重写限制

被子类重写的方法不能拥有比父类更加严格的访问权限。

访问权限:

 private < default < public

注:属性或方法前面既不是 private 或 public,那么它的访问权限就是 default (省略不写)

代码如下:

package hello;

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter.DEFAULT;

class Father01{
	public void tell(){
		System.out.println("父类调用方法");
	}
	void print(){
		
	}
}

class Son01 extends Father01{
	public void tell(){
		System.out.println("子类调用方法");
	}
	private void print(){
		
	}
}

public class Demo02 {

	public static void main(String[] args) {
		Son01 son01 = new Son01();
		son01.tell();
	}

}

  

上述代码报错:

Cannot reduce the visibility of the inherited method from
Father01

因此在子类重写 print 方法时,子类 print 方法前添加了 private 属性,导致子类 print 方法比父类 print 方法访问权限严格,因此报错。

Super 关键字 

Java 中通过 super 关键字完成对父类方法的调用,代码如下:

package hello;

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter.DEFAULT;

class Father01{
	int age;
	public void tell(){
		System.out.println("父类调用方法");
	}
	void print(){
		System.out.println("父类 print");
	}
}

class Son01 extends Father01{
	public void tell(){
		System.out.println("子类调用方法");
	}
	void print(){
		super.print();
		System.out.println("子类 print");
	}
}

public class Demo02 {

	public static void main(String[] args) {
		Son01 son01 = new Son01();
		son01.print();
	}

}

 

Java 重写和重载的区别

 区别重载重写
1单词OverloadingOverriding
2定义方法名称相同,参数的类型或者个数不同方法名称,参数的类型和个数完全相同
3权限对权限没有要求被重写的方法不能比父类拥有更严格的访问权限
4范围发生在一个类中  发生在继承中

 

转载于:https://www.cnblogs.com/changzhi/p/6746297.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值