Java面向对象

1.hashCode()和equals()方法的区别。

1.通过equals()判断能相等的,说明是相同的对象,也具有相等的哈希码(或散列码),说明HashCode()方法也判断相同。

2.如果两个对象的hashCode相同,他们可能不是同一对象。所以他的equals()可能判断不同。

 

2.请判断当一个对象被当作参数传递给一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

Java中只有值传递参数,当一个对象实例作为一个参数传递到方法中时,参数的值就是对该对象的引用,对象的内容可以在被调用方法中改变

,但是原对象是不改变的。

 

 

3.接口和抽象类的区别是什么?

 

Java提供和支持创建抽象类和接口,他们的实现有共同点,不同点在于:

1.接口中所有的方法隐含的都是抽象的,而抽象类可以同时包括抽象和非抽象方法。

2.类可以实现很多个接口,但是只能继承一个抽象类。

3.类可以不实现抽象类和接口声明的所有方法,当然,在这种情况下,类也必须声明为抽象的。

4.抽象类可以在不提供接口方法实现的情况下实现接口。

5.Java接口中声明的变量都是final的,抽象类的可以包含非final得变量。

6.Java接口中的成员函数默认是Public的。抽象类的成员函数可以是其他的修饰符。

7.接口是绝对抽象的,不可被实例化,抽象类也不可以被实例化,但是如果它包含main方法的话是可以被调用的(不懂)。

 

 

4.请说明Java是否支持多继承

Java中类不支持多继承,只支持单继承。但是Java中接口支持多继承。一个子接口可以有多个父类。(接口的作用是用来扩展对象的功能,一个子接口能继承多个父类接口,说明子接口扩展了多个功能,当类实现接口时,类就扩展了相应的功能)

 

 

5.请解释一下extends 和super 泛型限定符

上界<?extend Fruit>

下界<?super Apple>

 

上界的List只能get,不能add(除了add的null)

下界的List只能add,不能add

 

示例代码

 1 import java.util.ArrayList;
 2 import java.util.List;
 3   
 4 class Fruit {}
 5 class Apple extends Fruit {}
 6 class Jonathan extends Apple {}
 7 class Orange extends Fruit {}
 8   
 9 public class CovariantArrays {
10   public static void main(String[] args) {
11     //上界
12     List<? extends Fruit> flistTop = new ArrayList<Apple>();
13     flistTop.add(null);
14     //add Fruit对象会报错
15     //flist.add(new Fruit());
16     Fruit fruit1 = flistTop.get(0);
17   
18     //下界
19     List<? super Apple> flistBottem = new ArrayList<Apple>();
20     flistBottem.add(new Apple());
21     flistBottem.add(new Jonathan());
22     //get Apple对象会报错
23     //Apple apple = flistBottem.get(0);
24   }
25 }

 

 

posted @ 2020-07-23 22:43  程梦  阅读(70)  评论(0)    收藏  举报