Java求职实战之继承和多态

1.final修饰变量时,是引用不能变,还是引用的对象不能变?

是指引用变量不能变,引用对象的内容可以变。

2.==和equals有什么区别?

网上搜索一下,发现很多人解释的都比较清楚了。自己简单概括一下。

==符号用于比较变量的值,如果是数值则直接比较就行,如果是引用类型,包括字符串类型,是比较引用对象的地址。但当比较String a= "Monday";String b ="Monday";if(a == b){System.out.println("a == b");}时是输出a == b的。下面的解释粘贴复制的。程序在运行的时候会创建一个字符串缓冲池当使用 s2 = "Monday" 这样的表达是创建字符串的时候,程序首先会在这个String缓冲池中寻找相同值的对象,在这个程序中,a先被放到了池中,所以在b被创建的时候,程序找到了具有相同值的 a,将b引用a所引用的对象"Monday".若使用Sting b = new String("Monday");就不会输出a==b了。因为此时变量值不同。

equals是比较两个对象是否相同的正确方法。但若想比较对象的内容是否相同,应该重写父类的equals函数,明确指出相等的条件。否则默认是比较对象的引用地址。但比较字符串类型时会和==有所不同,使用new创建时,也会输出相等。

3.overload 和override的区别是什么?overload的方法是否可以改变返回值的类型?

overload是重载,override是重写。

重载的方法名称相同,参数类型列表不同(参数顺序和类型),返回值可以相同可以不同,可以有不同的访问修饰符,可以抛出不同的异常,但返回值、修饰符、异常都不能决定这个方法是否是重载。

重写发生在子类中,重写的函数和父类的方法名,参数列表相同,返回值可以是父类返回值的子类,访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private),重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。

4.构造函数是否可以被override?

构造函数是不能被继承的,只能在子类初始化时调用,所以不存在重写问题,构造函数只能在一个类中被重载。

5.接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可继承具体类?抽象类中是否可以有静态的main方法?

接口可以通过继承创建新的子接口。抽象类可以实现接口

抽象类是否可继承具体类:抽象类是可以继承实体类,但前提是实体类必须有明确的构造函数
答案很明确,可以继承。其实从Object就是个实体类,java的API文档里,每个抽象类的条目里都明确写着直接或间接继承自Object,所以这点是没有疑问的。
关键在于这答案里所说的“前提是实体类必须有明确的构造函数”一句,是什么意思。

抽象类中可以包含静态的main方法。

6.如何实现多态机制?

多态时在运行时刻接口匹配的对象能互相替换的能力。它的关键是:运行时、接口匹配、天。它是一种后期绑定机制。

实现多态的步骤:继承,重写,针对父类编程,运行时,接口替换。

7.abstract class和interface有什么区别?

(1)接口中不能有构造方法。

(2)接口中没有普通成员变量,只有常量。

(3)接口中的方法必须都是抽象的,不能有非抽象的普通方法。

(4)接口中的抽象方法只能是public类型的,默认为public abstract类型。

(5)接口中不能包含静态方法。

(6)抽象类和接口中都可以包含静态成员变量。但接口中定义的变量只能是public static final 类型,并且默认为public static final 类型。

(7)一个类可以实现多个接口,但只能继承一个类。

8.抽象方法可以是static的吗?

时间: 2024-08-26 23:29:34

Java求职实战之继承和多态的相关文章

Java基础——封装、继承、多态

Java基础--封装.继承.多态 --小实例快速成长 抽象: 1.目的:将复杂的东西简单化,将繁乱的内容有序化. 2.过程:对相同.相似的东西合而为一,对不同的内容进行归门别类. 3.结果:类.接口. 封装: 1.目的:化零为整,将零散的内容进行归属,进行权限控制. 2.过程:将某对象的属性.方法(功能)统一到其名下,并分别设置.适当的权限进行控制管理. 3.结果:对象,接口. 继承: 1.求大同存小异:在一个系列内,大部分都有的内容,就划归父类:子类将父类的内容继承过来,可以有自身的一些发展和

Java学习笔记-4.继承与多态

一.继承机制 1.继承:允许一个类作为另一个类的扩充版本 2.单继承:一个类只继承了一个父类    多继承:一个类继承了多个父类 Java只支持单继承,C++支持多继承 二.类的继承 1.形式: class SubClass extends BaseClass { //子类类体,定义子类的新成员 } Java中所有的类都直接或间接地继承类 java.lang.Object 2.构造方法 (1)显式构造方法    形式:super(参数表); 系统执行到这条语句时,会根据参数表判断调用父类中哪个构

java中封装,继承,多态,接口学习总结

### 一:封装java中封装是指一种将抽象性函式接口的实现细节部分包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问.要访问该类的代码和数据,必须通过严格的接口控制.封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段.适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性.***封装的优点***    1  良好的封装能够减少耦合.    2 类内部的结构可以自由修改.     3 可以对成员变量进行更精

关于java的this、继承、多态的理解

今天主要学习的内容是关于this.继承.多态的理解,并对其作出总结. 1.This 就目前来说,从个人的实验来看,this主要是对于一个类的对象的引用.它出现的位置主要是以它出现的形式决定的. ①.this(参数类型)这是在在构造方法中调用重写的构造方法. ②.作为某个类的对象来调用类中属性或方法.(用在某个类中的成员方法,因为某个类的对象就可以通过.来调用) 2.extends 继承之前已经了解了一些,接下来就是进一步的总结. ①.protected类型的变量是适合子类和父类之间的使用的,即使

java学习之路--继承(多态的动态绑定)

动态绑定过程中,对象调用对象方的执行过程 1:编译器查看对象的声明类型和方法名.有可能有多个方法名相同,但参数类型不一样的重载方法. 2:编译器查看调用方法时提供的参数类型.该过程叫重载解析,在相同的方法名中有一个参数类型完全匹配的的方法,就选这个合适的方法.如果没有找到一个参数类型匹配的方法,或者转换类型后也没有匹配的方法,也会报错. 3:如果是private或者static或者final方法或者构造器,那么编译器就能准确的知道应该调用哪个方法,这种调用方式叫做静态绑定.与此对应的是,调用的方

Java的继承与多态

Java的继承与多态对于提高开发效率,减少开发量,是非常有帮助的,也便于代码维护.下面是根据书上讲的,我又做了改进的例子. 假设需求: 公司需要对所有人员进行管理,所有人员分为普通员工和经理人,他们的头衔.工资.生日等信息都是不一样的,但是不能开发两套系统分别进行管理,而是要一套系统完成对所有人的管理. 设计一个员工类,这是父类,定义如下: package com.myHelloWorld; import java.text.ParseException; import java.text.Si

Java 继承、多态与类的复用

摘要: 本文结合Java的类的复用对面向对象两大特征继承和多态进行了全面的介绍. 首先,我们介绍了继承的实质和意义,并探讨了继承,组合和代理在类的复用方面的异同.紧接着,我们依据继承引入了多态.介绍了它的实现机制和详细应用.此外,为了更好地理解继承和多态.我们对final关键字进行了全面的介绍. 在此基础上.我们介绍了Java中类的载入及初始化顺序.最后.我们对面向对象设计中三个十分重要的概念–重载.覆盖与隐藏进行了详细的说明. 要点: 继承 组合,继承,代理 多态 final 关键字 类载入及

JAVA基础——面向对象三大特性:封装、继承、多态

JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据.     隐藏类的实例细节,方便修改和实现. 3.封装的实现步骤 需要注意:对封装的属性不一定要通过get/set方法,其他方法也可以对封装的属性进行操作.当然最好使用get/set方法,比较标准. A.访问修饰符 从表格可以看出从上到下封装性越来越差. B.this关键字 1.this关键字代表当前

java继承和多态

java方法直接调用原理推测 有错误还望指正 当直接调用某对象的某方法时  会更具该对象获取到类信息对象   在从类信息对象中找到该方法 没找到 获取父类信息对象继续查找 找到了执行  jdk距离实现是通过反射还是其它? 如果按以上原理    以下情况解释不通 创建一子类对象  赋值给一父类指针变量  通过父类指针变量掉run方法   run方法在父类或子类中为私有  这种情况调用的是父类的run方法 并非子类的run方法 反射jar包 package extend; import org.ju