对象是类的一个实例,如何确认什么时候需要实例,什么时候不需要?
对象是同类事物的一种抽象表现形式。
实例是对象的具体化。
一个对象可以实例化很多实例。对象就是一个模型,实例就是照着这个模型生产出的最终产品。
不用实例化:查询某个类是否拥有某个属性(男人是否有喉结,无须具体到某个人即可查询
要实例化:查询具体属性值(某个男人的体重
不通过构造函数也能创建对象吗?
可以。
Java创建对象的几种方式如下:
Java容器类
Java容器类库有两种主要类型:Collection和Map。
Collection类型中,每个“槽”只有一个元素;
Map类型中,持有Key-Value关联像一个小型数据库。
List:有序,取出顺序和放入顺序可能不同。
Set:每个值只能保存一个对象,不能含有重复的元素。
Queue:先进先出的容器。
在各种List中:
在各种Set中:
在各种Map中:HashMap用于快速查找。
当元素个数固定时,最好使用Array,因为Array效率最高。
请说明HashMap和HashTable的区别。
都属于Map接口类;
HashMap:允许null值;方法不是Synchronized。
HashTable:不允许null值;方法是Synchronized。
关于构造函数
什么是多态?
开门、开窗户、开电视。这里的“开”就是多态。
“一个接口,多个方法”
允许将子类类型的指针赋值给父类类型的指针。
重载和覆盖
重载(overload):同一个类中,同个方法名,不同参数。
覆盖(override):发生在子类与父类之间,同一个方法名,相同的参数列表和返回值。(被覆盖条件:基类函数必须有virtual关键字)
静态方法不能被覆盖。
继承与组合方式的代码复用
在继承结构中,父类内部细节对子类可见,“白盒式代码复用”。
组合:对象间各自的内部细节不可见,“黑盒式代码复用”。
Java中的super关键字和this关键字
使用前都不需要声明。
super关键字,直接指向超类的构造函数,用来引用超类中的变量和方法;
this关键字,使用在一个成员函数的内部,指向当前对象(指调用当前正在执行方法的那个对象。
super关键字:
Anonymous Inner Class(匿名内部类)是否可以extends(继承)其他类?是否可以implements(实现)interface(接口)?
匿名内部类是没有名字的内部类,不能继承其他类,但一个内部类可以作为一个接口,由另一个内部类实现。
抽象类与接口
抽象类:
接口类:
区别:
a. 抽象类可以有构造方法,接口中不能有构造方法。
b. 抽象类中可以有普通成员变量,接口中没有普通成员变量。
c. 抽象类中可以包含非抽象普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的方法。
d. 抽象类中的抽象方法的访问权限可以是 public、protected 和(默认类型,虽然 eclipse 不报错,但也不能用,默认类型子类不能继承),接口中的抽象方法只能是 public 类型的,并且默认即为 public abstract 类型。
e. 抽象类中可以包含静态方法,在 JDK1.8 之前接口中不能不包含静态方法,JDK1.8 以后可以包含。
f. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问权限可以是任意的,但接口中定义的变量只能是 public static final 类型的,并且默认即为 public static final 类型。
g. 一个类可以实现多个接口,用逗号隔开,但只能继承一个抽象类,接口不可以实现接口,但可以继承接口,并且可以继承多个接口,用逗号隔开。