---------------------- 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
相关推荐
在《黑马程序员 - Java基础教学 - 05 - 面向对象(1)》文档中,详细讲解了面向对象的基本概念及其在Java中的应用。 ### 面向对象与面向过程 面向对象和面向过程都是解决问题的思维模式,但面向对象更注重将功能和...
### 黑马程序员入学Java精华总结 #### 一、Java概述与基础知识 1. **何为编程?** - 编程是指通过编写计算机能够理解的指令来解决问题或完成特定任务的过程。这些指令通常被组织成算法,并使用某种编程语言实现。...
Java中的多态性主要体现在方法的重写(Override)和方法的重载(Overload)。 2. **基本数据类型与引用类型**: - **基本数据类型**:如int、char、boolean等,它们是Java语言预定义的,占用固定大小的内存。 - *...
重载和重写--java
本文将对《Java 基础入门》课后习题答案进行总结,涵盖了 Java 基础知识点,包括 Java 开发入门、Java 基础类、变量类型、运算符、控制流语句、方法重载等。 一、Java 开发入门 * Java EE、Java SE、Java ME 是 ...
北京动力节点-Java编程零基础教程-121-Java基本语法-方法的重载-方法重载区分标准.avi 北京动力节点-Java编程零基础教程-122-Java基本语法-方法递归调用-栈溢出错误.avi 北京动力节点-Java编程零基础教程-123-...
Java基础知识点总结 本文将对Java基础知识点进行总结,涵盖了变量、数据输入、数组、方法、封装、API、字符串、ArrayList、继承、多态等方面的重要概念。 变量和数据输入 在Java中,变量是存储数据的容器。变量的...
简述方法的重写与重载 - **重写**:发生在子类和父类之间,子类重写父类的方法。 - **重载**:发生在同一个类中,方法名相同但参数列表不同。 #### 29. final、finally、finallize有何区别? - `final`:表示最终...
【Java基础辅导班教程课件】是针对初学者设计的一系列教学资源,旨在帮助学习者扎实掌握Java编程语言的基础知识。第01期第8天的课程内容可能涵盖了上一阶段的学习总结,以及新的概念和技术的引入。在这个阶段,学员...
《Java基础入门(第3版)》是一本针对Java初学者的教材,其课后答案文档提供了对书中习题的解答,旨在帮助读者巩固所学知识。Java是一种面向对象的编程语言,具备跨平台性,由Java虚拟机(JVM)负责解释执行。Java...
"黑马程序员_Java基础辅导班教程课件[第01期]第11天"是一个专门为初学者设计的培训课程,旨在帮助学员深入理解和掌握Java的核心概念。这个课程可能是通过视频形式进行的,结合了理论讲解和实际操作,以便让学习者能...
### 黑马程序员入学Java知识(精华总结) #### 一、Java概述与基础知识 ##### 1、何为编程? 编程是指使用计算机语言来编写指令,这些指令被计算机执行以完成特定任务的过程。通过编程,我们可以控制计算机的行为...
在编程语言中,Java的重写(Override)和重载(Overload)是两个非常重要的概念,它们在类与对象的多态性中起到关键作用。理解并掌握这两个概念是成为一名合格的Java开发者的基础。 首先,我们来谈谈重写(Override...
今天,我们将学习Java基础视频辅导班课堂笔记总结Day08中的面向对象编程相关知识点。 继承是面向对象编程的重要概念,它允许一个类继承另一个类的成员变量和方法。继承的好处是提高代码重用性,让类与类之间产生...
在Java编程语言中,方法的重载(Overloading)与重写(Overriding)是两个非常重要的概念。它们虽然只有一字之差,但其实质却大相径庭。理解这两者的不同对于深入掌握Java语言至关重要。 ### 一、重载(Overloading...
以上只是Java 基础部分的核心知识点,随着深入学习,还会涉及网络编程、反射、注解、设计模式等多个方面。在学习过程中,结合实际项目练习,将理论知识应用于实践,将有助于更好地理解和掌握Java。
Java本地接口(JNI)允许Java代码调用C/C++代码,实现Java与本地代码的交互,提升性能。 【JavaFX与Swing】 JavaFX和Swing是Java的图形用户界面(GUI)工具包,用于构建桌面应用程序。JavaFX提供了更现代的UI组件...
Java基础知识点总结 Java是一种广泛应用的编程语言,掌握Java基础知识点对于编程人员非常重要。本节将对Java基础知识点进行总结,涵盖变量、数据类型、运算符、控制流程、方法、数组、内部类、继承、多态、接口、...