(完整word版)JAVA面试题解惑系列(九)——继承、多态、重载和重写

合集下载

java综合面试题目(3篇)

java综合面试题目(3篇)

第1篇1. 请简述Java的基本特点。

2. 请解释Java中的四种访问控制符及其作用。

3. 请解释Java中的类、对象、方法和构造函数之间的关系。

4. 请解释Java中的继承和多态。

5. 请解释Java中的封装和抽象。

6. 请解释Java中的接口和抽象类。

7. 请解释Java中的异常处理。

8. 请解释Java中的泛型。

9. 请解释Java中的静态变量和静态方法。

10. 请解释Java中的构造函数重载。

11. 请解释Java中的方法重载。

12. 请解释Java中的方法重写。

13. 请解释Java中的方法访问权限。

14. 请解释Java中的方法覆盖。

15. 请解释Java中的方法绑定。

16. 请解释Java中的方法重载与重写的区别。

17. 请解释Java中的方法访问权限与访问控制符的关系。

18. 请解释Java中的静态变量与实例变量的区别。

19. 请解释Java中的方法重写与重载的区别。

20. 请解释Java中的方法绑定与多态的关系。

二、Java集合框架1. 请解释Java中的集合框架及其主要接口。

2. 请解释Java中的List、Set和Map的区别。

3. 请解释Java中的ArrayList、LinkedList和Vector的区别。

4. 请解释Java中的HashSet、LinkedHashSet和TreeSet的区别。

5. 请解释Java中的HashMap、LinkedHashMap和TreeMap的区别。

6. 请解释Java中的HashSet、HashMap和HashTable的区别。

7. 请解释Java中的ArrayList和LinkedList的内部实现。

8. 请解释Java中的HashSet和HashMap的内部实现。

9. 请解释Java中的ArrayList、LinkedList、HashSet和HashMap的性能特点。

10. 请解释Java中的集合框架中的迭代器、列表迭代器、集合视图和映射视图。

java模拟面试题目(3篇)

java模拟面试题目(3篇)

第1篇一、Java基础知识1. 请简述Java语言的特点。

2. 什么是Java虚拟机(JVM)?它有什么作用?3. 什么是Java的内存模型?请解释Java内存模型中的几个关键概念:堆、栈、方法区、程序计数器、本地方法栈。

4. 什么是Java中的反射机制?请举例说明反射在Java中的应用。

5. 什么是Java中的泛型?请解释泛型的原理和作用。

6. 请简述Java中的四种访问控制符:public、protected、default、private。

7. 什么是Java中的继承和多态?请举例说明继承和多态在实际开发中的应用。

8. 什么是Java中的封装?请举例说明封装在实际开发中的应用。

9. 什么是Java中的接口和抽象类?它们之间有什么区别?10. 什么是Java中的异常处理?请解释try-catch-finally语句的执行顺序。

二、Java集合框架1. 请列举Java集合框架中的常用集合类及其特点。

2. 请简述ArrayList、LinkedList、HashMap、HashSet的区别。

3. 什么是Java中的泛型集合?请举例说明泛型集合的应用。

4. 什么是Java中的迭代器(Iterator)和枚举器(Enum)?请比较它们的区别。

5. 什么是Java中的List、Set、Map的遍历方法?6. 请解释Java中的ArrayList和LinkedList的内部实现原理。

7. 什么是Java中的HashMap的扩容机制?8. 什么是Java中的HashSet的内部实现原理?9. 请解释Java中的线程安全集合类,如CopyOnWriteArrayList、ConcurrentHashMap。

三、Java多线程与并发1. 什么是Java中的线程?请解释线程的创建、调度和同步。

2. 请简述Java中的线程状态,如新建、就绪、运行、阻塞、等待、超时等待、终止。

3. 什么是Java中的同步机制?请解释synchronized关键字的作用。

java多态面试题

java多态面试题

java多态面试题Java中的多态是面向对象编程中的重要概念之一,也是Java面试中经常会被问到的知识点。

本文将为大家整理几道经典的Java多态面试题,并详细解答,以帮助大家更好地理解Java多态的原理和应用。

1. 什么是多态?如何实现多态?多态是指同一个方法名,在不同的对象上有不同的行为。

在Java中,实现多态主要依靠两个机制:继承和重写(覆盖)。

继承:子类可以继承父类的属性和方法。

通过继承,子类可以拥有父类的方法,并且可以在子类中重新定义这些方法。

重写(覆盖):子类可以定义与父类中同名的方法,当调用该方法时,会优先执行子类中的方法。

通过继承和重写,我们可以在父类中声明一个方法,而子类可以根据需要对该方法进行不同的实现。

这就是多态的基本原理。

2. 多态的好处是什么?多态的好处主要有以下几点:- 提高代码的灵活性和可扩展性:通过多态,我们可以编写出更加通用、灵活的代码,便于后续的扩展和维护。

- 降低了代码的耦合性:多态让对象的具体类型对于调用者来说是透明的,只需要关心对象所属的父类或接口即可,降低了代码之间的依赖关系,提高了代码的可维护性。

- 提高了代码的可读性:多态的代码更加简洁、直观,能够更好地表达程序的意图。

3. Java中如何实现多态?Java中实现多态主要有两种方式:- 继承实现多态:通过继承一个父类,并重写父类的方法,在程序中使用父类的引用指向子类的对象,从而实现对同一方法的不同实现。

示例代码:```javaclass Animal {public void sound() {System.out.println("Animal makes sound");}}class Dog extends Animal {@Overridepublic void sound() {System.out.println("Dog barks");}}class Cat extends Animal {@Overridepublic void sound() {System.out.println("Cat meows");}}public class Main {public static void main(String[] args) {Animal animal1 = new Dog();Animal animal2 = new Cat();animal1.sound(); // 输出:Dog barksanimal2.sound(); // 输出:Cat meows}}```- 接口实现多态:通过实现一个接口,并重写接口中的方法,在程序中使用接口的引用指向实现类的对象,从而实现对同一方法的不同实现。

Java初级面试题及答案

Java初级面试题及答案

Java初级面试题及答案1、Java中的重载与重写有什么区别重载(Overload)是让类以统一的方式处理不同类型数据的一种手段,实质表现就是多个具有不同的参数个数或者类型的同名函数(返回值类型可随意,不能以返回类型作为重载函数的区分标准)同时存在于同一个类中,是一个类中多态性的一种表现(调用方法时通过传递不同参数个数和参数类型来决定具体使用哪个方法的多态性)。

重写(Override)是父类与子类之间的多态性,实质是对父类的函数进行重新定义,如果在子类中定义某方法与其父类有相同的名称和参数则该方法被重写,不过子类函数的访问修饰权限不能小于父类的;若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法,如需父类中原有的方法则可使用super关键字。

重载:必须具有不同的参数列表;可以有不同的返回类型;可以有不同的访问修饰符;可以抛出不同的异常。

重写:参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载;返回类型必须一直与被重写的方法相同,否则不能称其为重写而是重载;访问修饰符的限制一定要大于等于被重写方法的访问修饰符;重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。

重载与重写是Java多态性的不同表现,重写是父类与子类之间多态性的表现,在运行时起作用(动态多态性,譬如实现动态绑定),而重载是一个类中多态性的表现,在编译时起作用(静态多态性,譬如实现静态绑定)。

2、Java中final、finally、finalize 的区别final 是一个修饰符,如果一个类被声明为final 则其不能再派生出新的子类,所以一个类不能既被声明为abstract 又被声明为final 的;将变量或方法声明为final 可以保证它们在使用中不被改变(对于对象变量来说其引用不可变,即不能再指向其他的对象,但是对象的值可变),被声明为final 的变量必须在声明时给定初值,而在以后的引用中只能读取不可修改,被声明为final 的方法也同样只能使用不能重载。

20XXjava面试题及参考答案.doc

20XXjava面试题及参考答案.doc

2017java面试题及参考答案2017java面试题及答案1. 面向对象编程的三大特性是什么,请简要阐述(1).继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。

对象的一个新类可以从现有的类中派生,这个过程称为类继承。

新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。

派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

(2).封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。

面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

(3).多态性:多态性是指允许不同类的对象对同一消息作出响应。

多态性包括参数化多态性和包含多态性。

多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

2. String 和StringBuffer的区别JA V A平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据这个String类提供了数值不可改变字符串而这个StringBuffer类提供的字符串进行修改当你知道字符数据要改变的时候你就可以使用StringBuffer典型地,你可以使用StringBuffers来动态构造字符数据3. 说出ArrayList,Vector, LinkedList的存储性能和特性ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized 思路方法(线程安全) ,通常性能上较ArrayList差,而LinkedList 使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项前后项即可,所以插入速度较快4. Collection 和Collections的区别Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

职场_java面试会问什么问题

职场_java面试会问什么问题

java面试会问什么问题java面试问题(一)1、问题:程序中可以允许多个类同时拥有都有main方法吗?答案:可以。

当程序运行的时候,我们会指定运行的类名。

JVM只会在你指定的类中查找main方法。

因此多个类拥有main方法并不存在命名冲突的问题。

2、问题:静态变量在什么时候加载?编译期还是运行期?静态代码块加载的时机呢?答案:当类加载器将类加载到JVM中的时候就会创建静态变量,这跟对象是否创建无关。

静态变量加载的时候就会分配内存空间。

静态代码块的代码只会在类第一次初始化的时候执行一次。

一个类可以有多个静态代码块,它并不是类的成员,也没有返回值,并且不能直接调用。

静态代码块不能包含this或者super,它们通常被用初始化静态变量。

3、问题:一个类能拥有多个main方法吗?答案:可以,但只能有一个main方法拥有以下签名: public static void main(String[] args) {}否则程序将无法通过编译。

编译器会警告你main方法已经存在。

4、问题:简单的介绍下JVM是如何工作的?答案:JVM是一台抽象的计算机,就像真实的计算机那样,它们会先将.java 文件编译成.class文件(.class文件就是字节码文件),然后用它的解释器来加载字节码。

5、问题:如果原地交换两个变量的值?答案:先把两个值相加赋值给第一个变量,然后用得到的结果减去第二个变量,赋值给第二个变量。

再用第一个变量减去第二个变量,同时赋值给第一个变量。

代码如下: int a=5,b=10;a=a+b; b=a-b; a=a-b;使用异或操作也可以交换。

第一个方法还可能会引起溢出。

异或的方法如下: int a=5,b=10;a=a+b; b=a-b; a=a-b; int a = 5; int b = 10;a = a ^ b;b = a ^ b;a = a ^ b;6、问题:什么是数据的封装?答案:数据封装的一种方式是在类中创建set和get方法来访问对象的数据变量。

java最常见的面试题(带答案)

java最常见的面试题(带答案)java最常见的面试题面试题NO.01-NO.05问题:如果main方法被声明为private会怎样答案:能正常编译,但运行的时候会提示”main方法不是public的”。

问题:Java里的传引用和传值的区别是什么答案:传引用是指传递的是地址而不是值本身,传值则是传递值的一份拷贝。

问题:如果要重写一个对象的equals方法,还要考虑什么答案:hashCode。

问题:Java的”一次编写,处处运行”是如何实现的答案:Java程序会被编译成字节码组成的class文件,这些字节码可以运行在任何平台,因此Java是平台独立的。

问题:说明一下public static void main(String args[])这段声明里每个关键字的作用答案:public: main方法是Java程序运行时调用的第一个方法,因此它必须对Java环境可见。

所以可见性设置为pulic.static: Java平台调用这个方法时不会创建这个类的一个实例,因此这个方法必须声明为static。

void: main方法没有返回值。

String是命令行传进参数的类型,args是指命令行传进的字符串数组。

面试题NO.06-NO.10问题:==与equals的区别答案:==比较两个对象在内存里是不是同一个对象,就是说在内存里的存储位置一致。

两个String对象存储的值是一样的,但有可能在内存里存储在不同的地方 .==比较的是引用而equals方法比较的是内容。

public booleanequals(Object obj) 这个方法是由Object对象提供的,可以由子类进行重写。

默认的实现只有当对象和自身进行比较时才会返回true,这个时候和==是等价的。

String, BitSet, Date, 和File都对equals方法进行了重写,对两个String对象而言,值相等意味着它们包含同样的字符序列。

java 继承 面试题

java 继承面试题Java继承面试题Java中的继承是一项重要的特性,它允许我们通过创建一个新的类来继承现有的类,并且可以在新的类中复用已有类的属性和方法。

在面试中,经常会涉及到关于Java继承的问题,以下是一些常见的Java 继承面试题及其解答。

一、什么是继承?为什么要使用继承?继承是指一个类从另一个类获得属性和方法的过程。

通过继承,子类可以获取父类的非私有属性和方法,并且还可以在子类中添加新的属性和方法。

继承的主要优点如下:1. 代码复用:可以通过继承现有的类来避免重复编写相似的代码。

2. 可扩展性:可以在已有类的基础上添加新的功能,使得程序更加易于扩展和维护。

3. 多态性:可以通过继承实现面向对象的多态性特性,提高代码的灵活性和可读性。

二、Java中如何实现继承?在Java中,可以使用关键字`extends`来实现继承。

子类使用`extends`关键字后紧跟父类的名称,表示子类继承自该父类。

例如,下面是一个简单的继承示例:```javapublic class Animal {public void eat() {System.out.println("动物正在吃食物"); }}public class Dog extends Animal {public void bark() {System.out.println("狗在叫");}}public class Main {public static void main(String[] args) {Dog dog = new Dog();dog.eat(); // 继承自Animal类的eat方法 dog.bark(); // Dog类自身的bark方法}}在上面的示例中,`Dog`类继承自`Animal`类,通过调用`dog.eat()`方法可以访问到`Animal`类中定义的`eat()`方法。

java 中级 面试题

java 中级面试题一、Java中的基本概念Java是一门广泛应用于软件开发领域的高级编程语言,由Sun Microsystems公司于1995年发行。

它具有跨平台的特性,能够在不同的操作系统上运行,如Windows、Linux和Mac OS等。

Java的设计宗旨是“一次编写,到处运行”,因此它成为了许多开发人员的首选语言。

Java面试过程中,会涉及到一些中级的知识点和题目,下面我们将逐一介绍并讨论。

二、面试题目一:Java中的多态性是什么?面试官通常会问到Java中的多态性概念,因为多态性是面向对象编程的重要特性之一。

在Java中,多态性指的是同一个类的实例在不同的情况下表现出不同的行为。

这是通过方法的重载和方法的重写两种方式来实现的。

1. 方法的重载(Overloading):在同一个类中,可以定义多个具有相同名称但参数列表不同的方法。

这样在调用方法时,可以根据传入的参数类型和个数,自动选择调用相应的方法。

例如:```javapublic class Demo {public void print(String str) {System.out.println("String: " + str);}public void print(int num) {System.out.println("Number: " + num);}public static void main(String[] args) {Demo demo = new Demo();demo.print("Hello");demo.print(123);}}```输出结果为:```String: HelloNumber: 123```2. 方法的重写(Overriding):在类的继承关系中,子类可以重写父类中已有的方法,以实现子类特定的功能需求。

子类重写的方法具有相同的名称、参数列表和返回类型。

java校招面试题目(3篇)

第1篇第一部分:基础知识1. Java基本概念(1)请解释Java中的面向对象编程(OOP)的特点。

解析:面向对象编程的特点包括封装、继承和多态。

封装是指将数据和对数据的操作封装在一个类中;继承是指允许一个类继承另一个类的属性和方法;多态是指同一个方法在不同对象上表现出不同的行为。

(2)简述Java中的四种访问控制符及其作用范围。

解析:Java中的四种访问控制符分别是public、protected、默认(不写)和private。

public可以访问任何类;protected可以在同一个包内和子类中访问;默认访问(不写)只能在同一个包内访问;private只能在类内部访问。

2. Java基本数据类型(1)请列出Java中的基本数据类型,并说明其特点和取值范围。

解析:Java中的基本数据类型包括byte、short、int、long、float、double、char和boolean。

byte和short为有符号整数类型,取值范围分别为-128到127和-32,768到32,767;int为基本整型,取值范围为-2,147,483,648到2,147,483,647;long为长整型,取值范围为-9,223,372,036,854,775,808到9,223,372,036,854,775,807;float和double为浮点数类型,取值范围分别为-3.4E38到3.4E38和-1.8E308到1.8E308;char为字符类型,取值范围为0到65,535;boolean为布尔类型,取值为true或false。

(2)简述Java中的自动装箱和拆箱。

解析:自动装箱是指将基本数据类型自动转换为包装类型(如int自动转换为Integer);自动拆箱是指将包装类型自动转换为基本数据类型。

在装箱和拆箱过程中,如果数据类型不匹配,会抛出ClassCastException异常。

3. Java关键字(1)请解释Java中的关键字final、static和synchronized。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JAVA面试题解惑系列(九)——继承、多态、重载和重写什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承、多态、重载和重写。

继承(inheritance)简单的说,继承就是在一个现有类型的基础上,通过增加新的方法或者重定义已有方法(下面会讲到,这种方式叫重写)的方式,产生一个新的类型。

继承是面向对象的三个基本特征--封装、继承、多态的其中之一,我们在使用JAVA时编写的每一个类都是在继承,因为在JAVA语言中,ng.Object类是所有类最根本的基类(或者叫父类、超类),如果我们新定义的一个类没有明确地指定继承自哪个基类,那么JAVA就会默认为它是继承自Object类的。

我们可以把JAVA中的类分为以下三种:1.类:使用class定义且不含有抽象方法的类。

2.抽象类:使用abstract class定义的类,它可以含有,也可以不含有抽象方法。

3.接口:使用interface定义的类。

在这三种类型之间存在下面的继承规律:∙类可以继承(extends)类,可以继承(extends)抽象类,可以继承(implements)接口。

∙抽象类可以继承(extends)类,可以继承(extends)抽象类,可以继承(implements)接口。

∙接口只能继承(extends)接口。

请注意上面三条规律中每种继承情况下使用的不同的关键字extends和implements,它们是不可以随意替换的。

大家知道,一个普通类继承一个接口后,必须实现这个接口中定义的所有方法,否则就只能被定义为抽象类。

我在这里之所以没有对implements关键字使用“实现”这种说法是因为从概念上来说它也是表示一种继承关系,而且对于抽象类implements接口的情况下,它并不是一定要实现这个接口定义的任何方法,因此使用继承的说法更为合理一些。

以上三条规律同时遵守下面这些约束:1.类和抽象类都只能最多继承一个类,或者最多继承一个抽象类,并且这两种情况是互斥的,也就是说它们要么继承一个类,要么继承一个抽象类。

2.类、抽象类和接口在继承接口时,不受数量的约束,理论上可以继承无限多个接口。

当然,对于类来说,它必须实现它所继承的所有接口中定义的全部方法。

3.抽象类继承抽象类,或者实现接口时,可以部分、全部或者完全不实现父类抽象类的抽象(abstract)方法,或者父类接口中定义的接口。

4.类继承抽象类,或者实现接口时,必须全部实现父类抽象类的全部抽象(abstract)方法,或者父类接口中定义的全部接口。

继承给我们的编程带来的好处就是对原有类的复用(重用)。

就像模块的复用一样,类的复用可以提高我们的开发效率,实际上,模块的复用是大量类的复用叠加后的效果。

除了继承之外,我们还可以使用组合的方式来复用类。

所谓组合就是把原有类定义为新类的一个属性,通过在新类中调用原有类的方法来实现复用。

如果新定义的类型与原有类型之间不存在被包含的关系,也就是说,从抽象概念上来讲,新定义类型所代表的事物并不是原有类型所代表事物的一种,比如黄种人是人类的一种,它们之间存在包含与被包含的关系,那么这时组合就是实现复用更好的选择。

下面这个例子就是组合方式的一个简单示例:Java代码1.public class Sub {2.private Parent p = new Parent();3.4.public void doSomething() {5.// 复用Parent类的方法6.p.method();7.// other code8.}9.}10.11.class Parent {12. public void method() {13. // do something here14. }15.}当然,为了使代码更加有效,我们也可以在需要使用到原有类型(比如Parent p)时,才对它进行初始化。

使用继承和组合复用原有的类,都是一种增量式的开发模式,这种方式带来的好处是不需要修改原有的代码,因此不会给原有代码带来新的BUG,也不用因为对原有代码的修改而重新进行测试,这对我们的开发显然是有益的。

因此,如果我们是在维护或者改造一个原有的系统或模块,尤其是对它们的了解不是很透彻的时候,就可以选择增量开发的模式,这不仅可以大大提高我们的开发效率,也可以规避由于对原有代码的修改而带来的风险。

多态(Polymorphism)多态是又一个重要的基本概念,上面说到了,它是面向对象的三个基本特征之一。

究竟什么是多态呢?我们先看看下面的例子,来帮助理解:Java代码1.//汽车接口2.interface Car {3.// 汽车名称4.String getName();5.6.// 获得汽车售价7.int getPrice();8.}9.10.// 宝马11.class BMW implements Car {12. public String getName() {13. return "BMW";14. }15.16. public int getPrice() {17. return 300000;18. }19.}20.21.// 奇瑞QQ22.class CheryQQ implements Car {23. public String getName() {24. return "CheryQQ";25. }26.27. public int getPrice() {28. return 20000;29. }30.}31.32.// 汽车出售店33.public class CarShop {34. // 售车收入35. private int money = 0;36.37. // 卖出一部车38. public void sellCar(Car car) {39. System.out.println("车型:" + car.getName() + " 单价:" + car.getPrice());40. // 增加卖出车售价的收入41. money += car.getPrice();42. }43.44. // 售车总收入45. public int getMoney() {46. return money;47. }48.49. public static void main(String[] args) {50. CarShop aShop = new CarShop();51. // 卖出一辆宝马52. aShop.sellCar(new BMW());53. // 卖出一辆奇瑞QQ54. aShop.sellCar(new CheryQQ());55. System.out.println("总收入:" + aShop.getMoney());56. }57.}运行结果:1.车型:BMW 单价:3000002.车型:CheryQQ 单价:200003.总收入:320000继承是多态得以实现的基础。

从字面上理解,多态就是一种类型(都是Car类型)表现出多种状态(宝马汽车的名称是BMW,售价是300000;奇瑞汽车的名称是CheryQQ,售价是2000)。

将一个方法调用同这个方法所属的主体(也就是对象或类)关联起来叫做绑定,分前期绑定和后期绑定两种。

下面解释一下它们的定义:1.前期绑定:在程序运行之前进行绑定,由编译器和连接程序实现,又叫做静态绑定。

比如static方法和final方法,注意,这里也包括private方法,因为它是隐式final的。

2.后期绑定:在运行时根据对象的类型进行绑定,由方法调用机制实现,因此又叫做动态绑定,或者运行时绑定。

除了前期绑定外的所有方法都属于后期绑定。

多态就是在后期绑定这种机制上实现的。

多态给我们带来的好处是消除了类之间的耦合关系,使程序更容易扩展。

比如在上例中,新增加一种类型汽车的销售,只需要让新定义的类继承Car类并实现它的所有方法,而无需对原有代码做任何修改,CarShop类的sellCar(Car car)方法就可以处理新的车型了。

新增代码如下:Java代码1.// 桑塔纳汽车2.class Santana implements Car {3.public String getName() {4.return "Santana";5.}6.7.public int getPrice() {8.return 80000;9.}10.}重载(overloading)和重写(overriding)重载和重写都是针对方法的概念,在弄清楚这两个概念之前,我们先来了解一下什么叫方法的型构(英文名是signature,有的译作“签名”,虽然它被使用的较为广泛,但是这个翻译不准确的)。

型构就是指方法的组成结构,具体包括方法的名称和参数,涵盖参数的数量、类型以及出现的顺序,但是不包括方法的返回值类型,访问权限修饰符,以及abstract、static、final等修饰符。

比如下面两个就是具有相同型构的方法:Java代码1.public void method(int i, String s) {2.// do something3.}4.5.public String method(int i, String s) {6.// do something7.}而这两个就是具有不同型构的方法:Java代码1.public void method(int i, String s) {2.// do something3.}4.5.public void method(String s, int i) {6.// do something7.}了解完型构的概念后我们再来看看重载和重写,请看它们的定义:∙重写,英文名是overriding,是指在继承情况下,子类中定义了与其基类中方法具有相同型构的新方法,就叫做子类把基类的方法重写了。

这是实现多态必须的步骤。

∙重载,英文名是overloading,是指在同一个类中定义了一个以上具有相同名称,但是型构不同的方法。

在同一个类中,是不允许定义多于一个的具有相同型构的方法的。

我们来考虑一个有趣的问题:构造器可以被重载吗?答案当然是可以的,我们在实际的编程中也经常这么做。

实际上构造器也是一个方法,构造器名就是方法名,构造器参数就是方法参数,而它的返回值就是新创建的类的实例。

但是构造器却不可以被子类重写,因为子类无法定义与基类具有相同型构的构造器。

相关文档
最新文档