黑马程序员--java基础复习--访问权限、重载与重写

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ---------------------

访问权限

java中有四种访问权限public、protected、默认、private,public 和private很好理解,一个是对外全公开,一个是对外全封闭,而默认的和protected则比较费解。

 protected修饰符比默认的修饰符权限更大一点,一句话比较就是,protected修饰的属性和方法在包外能被继承,并且在包外继承的子类中访问权限相当于private,只能在子类内部被访问,而默认的属性和方法在包外不能不继承,更别说访问了。所以除去有继承关系的两个类之外,protected和默认访问修饰符的权限是一样的,都是在同包中可以被访问,不同包中坚决不给访问;在同包中可以被继承,不同包中坚决不给继承。

 

重载

 重载就是在一个类中可以定义多个同方法名的函数,前提是参数列表必须不同,比方说定义一个求和的函数,当我们不知道需要求和的数的个数的时候,就需要定义多个求和函数,分别接收不同个数的参数;重写可以改变访问权限、返回值类型,只要保证参数列表不同(表现为参数类型、参数个数)。在java1.5中已经加入了一个新的特性,就是参数列表可以为动态的,函数只用定义一个

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println(add(2));
		System.out.println(add(2, 3, 4, 5));

	}
	
	//函数动态接收不同个数的参数,并封装成一个数组,如果只有一个参数,数组的长度为0
	public static int add(int i, int...args){
		int sum = i;
		
		System.out.println(args.length);
		for(int j=0; j<args.length; j++){
			sum = sum + args[0];
		}
		
		return sum;
	}

}

 

 输出结果为

0
2
3
11

 

重写

 重写只发生在子类中,重写的前提就是继承到了来自父类的方法,在同包中,只有private方法不能被继承,在不同包中,private和默认的方法不能被继承。重写应遵循以下四个原则:

1、返回值类型相同,协变式除外;在jdk1.4以前返回值类型必须严格相同,从jdk1.4开始,返回值可以不同,但必须是协变,通俗点就是子类返回值类型必须是超累返回值类型的子类。

父类:

import java.io.Reader;

public class Parent {
	
	
	public Reader g() {
		return null;
		
	}
}

 子类:

import java.io.FileReader;

class Child extends Parent{

	@Override
	public FileReader g() {
		return null;
		
	}		
}

 2、参数列表相同

3、不抛出比父类方法更多的异常

4、拥有和父类方法相同或者更开放的访问权限

 

第3、4两点主要是为了多态的合理化,多态要求通过父类引用调用子类方法,所以在定义方法的同时,可以对父类方法会出现的异常先行处理,如果子类会抛出父类没见过的异常,那么定义多态的方法就没办法对之进行处理了,同理,如果访问权限比父类还低,定义多态的方法也就无法访问子类中的重写的方法了。

 

重载和重写的比较

 重写重载
参数列表不能修改必须修改
返回类型协变可以修改,别的不能修改可以修改
异常比父类范围更窄可以修改
访问权限比父类返回更宽可以修改
调用对象类型(换句话说就是堆上实际实例的类型决定哪方法,这发生在运行时     引用类型决定哪个重载版本(根据声明的参数类型),这发生在编译中。被调用的实际方法仍然是发生在运行时的虚拟方法调用,但是编译器已经知道 所调用方法的签名。因此,在运行时,参数匹配已经确定,只是还不知道该方法所在的实际类

 

 

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值