`

黑马程序员--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
分享到:
评论

相关推荐

    重载和重写--java

    重载和重写--java

    125集专攻JAVA基础 JAVA零基础入门学习视频教程 动力节点JAVA视频教程.txt

    北京动力节点-Java编程零基础教程-121-Java基本语法-方法的重载-方法重载区分标准.avi 北京动力节点-Java编程零基础教程-122-Java基本语法-方法递归调用-栈溢出错误.avi 北京动力节点-Java编程零基础教程-123-...

    Java 基础核心总结.md

    Java 基础核心总结 - Java 基础核心总结 - Java 概述 - 什么是 Java? - Java 的特点 - Java 开发环境 - JDK - JRE - Java 开发环境配置 - Java 基本语法 - 数据类型 - 基础语法 - 运算符 - Java 执行...

    java中重载与重写

    重载与重写的区别,详细描述了java中重载与重写的区别。

    2018年黑马程序员全套java教程第4天笔记+讲义+源码

    掌握idea开发工具的安装 能够使用idea创建Java工程 能够使用idea创建包和类 了解idea的Java工程目录 了解idea字体的设置 掌握idea常用开发快捷键 了解项目的导入和删除 ...掌握方法重载的概念 能够判断出方法的重置

    重载---马克-to-win java视频

    重载 马克-to-win java视频 overload 函数的详细介绍

    Java重写与重载(区别与用途)

    我根据我的理解来谈谈Java中重写方法与重载方法的区别。  重写  Java 中重写又叫覆盖,主要是指继承(extends)父类或者实现(implements)接口时将父类或者接口中已经存在的方法进行重新定义。重写的方法在父类...

    Java重写重载线程

    描述了重写与重载,及线程的一个例题纠错

    java基础_关于重载的应用

    java 对重载的应用,区别 重载 重写的 区别。让大家认识重载

    JAVA重写和重载.pdf

    JAVA重写和重载.pdf

    Java中重载和重写总结

    Java中重载和重写总结,基础知识,概念分清楚,补充基础知识

    JAVA理论知识基础复习

    JAVA理论知识基础复习 构造方法 new关键字 方法的重载 特殊变量this 关键字static 定义常量 继承 方法的重写 特殊变量super 多态性 等相关知识点总结

    重载与覆写/重写的区别

    重载与覆写/重写的区别 区别 重载 覆写 1 单词 OverLoading Override 2 概念 方法名称相同,参数的类型或个数不同 方法名称相同,参数的类型或个数相 同,返回值类型相同 3 范围 发生在一个类之中...

    java源码包---java 源码 大量 实例

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    Java重载和重写的区别--源码实例

    // 不能通过不同的访问权限进行重载 public void fun3() { } public static void main(String[] args) { // 这里只是定义了OverloadTest的实例,所以test不会调用 // OverloadTest1中的方法。 OverloadTest ...

    JAVA中的方法重写与方法重载区别

    JAVA中的方法重写与方法重载的区别,还算挺详细的

    java中的重载和重写的区别

    主要总结了java中的重载和重写的区别,供大家理解参考,有问题可以补充

    Java的重载和重写

    对Java中方法的重载和重写的具体描述,有利于区分方法的重载和重写

    C#重写重载与多态

    重写:是指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中必须指明override。重载:用于在给定了参数列表和一组候选函数成员的情况下,选择一个最佳函数成员来实施调用。多态:c#的多态性...

    Java中方法重载与重写的区别

    1、重载  方法的重载是同一个类中多态性的一种表现。  方法重载须遵循如下两条...  (3)子类方法不能缩小所重写方法的访问权限。  (4)子类方法不能抛出比所覆盖方法更多的异常。  (5)静态方法不存在重

Global site tag (gtag.js) - Google Analytics