Java面试题记录第五天
1.this与super有什么区别?
答:
- 在Java语言中,this用来指向当前对象的实例。他的一个非常重要的作用就是用来区分对象的成员变量和方法的形参(局部变量,也就是当局部变量与成员变量名相同时,就会覆盖成员变量)
- super可以用来访问父类的方法或成员变量,当子类的方法或成员变量与父类有相同的名字时,也会覆盖父类的方法或成员变量,想要访问父类的方法或成员变量只能通过super关键字访问。
- 具体代码参考这里:第一点,第二点
2.什么是继承?
答:继承是对象对象的一个特性。通过继承,子类可以实现父类中的一些成员方法,成员变量,从而提高代码的复用性,提高开发效率。继承的特点: - Java不支持多继承,子类最多只能有一个父类,但是可以通过实现多接口来达到多重继承的目的。
- 子类只能继承父类的非私有的成员变量和成员方法。
- 当子类中定义的成员变量和父类中定义的成员变量与成员方法同名时,子类的成员变量会覆盖父类的成员变量,而不会继承。
- 使用super去调用父类被覆盖掉的方法。
3.多态的实现机制?
答:多态是面向对象的另一个重要特性,他表示当同一个操作作用在不同的对象时,会有不同的语义,从而产生不同的结果。有两种实现方法: - 方法的重载:重载是指同一类中有多个同名的方法,但这些方法有着不同的参数,因此在编译时就可以确定到底调用哪个方法,属于编译时的多态。(在一个类中,new了很多对象,尽管这些对象属于一个类,这些对象在调用方法时,方法名相同,参数不同,会导致执行结果不一样,典型的就是构造函数)
- 方法的覆盖(重写):子类可以覆盖父类的方法,因此同样的方法会在父类与子类中有着不同的表现形式。这里涉及到一个引用变量,例如:
Test1 t=new Test1();
引用变量就是指Test1 t这一部分,new Test1是以Test1类为模板,在堆空间里创建一个Test1类对象(也简称为Test1对象)。先这样记住。父类的引用变量不仅可以指向父类的实例对象,也可以指向其子类的实例对象。子类对象会默认调用父类的构造方法。
4.重载与覆盖的区别:这两个都是Java动态性的不同表现形式。区别主要在于: - 覆盖是子类和父类之间的关系;重载是同一个类中方法之间的关系。
- 覆盖要求参数列表相同,方法名相同;重载要求方法名相同但参数不同
- 覆盖关系中,调用方法体是根据对象的类型来决定;重载是根据调用时的参数列表选择方法体的