1. 如何实现两个对象之间互发消息,请举例说明。
当一个类在域变量中声明另外一个对象时,两个对象之间就可以互发消息。
class A{
private B b;
private String msg = "This is A's msg!" ;
public String getmsg() { return this.msg; }
public void show(){
System.out.println(b.getmsg());
}
}
class B{
private A a;
private String msg = "This is B's msg!" ;
public String getmsg() { return this.msg; }
private void show(){
System.out.println(a.getmsg());
}
}
2. 谈谈组合与继承的区别以及两者的使用场景(即什么时候宜用组合 ?什么时候宜用继承?)。
组合:类之间关联性不大,类成员的访问权限不具有特殊性,一般用于类A是类B的组件;
继承:类之间存在衍生,发展,包含等关联,父类protected成员可以提供给子类访问权限,一般用于类A是类B的特例;
3. Java中的运行时多态的含义是什么?有什么作用?请举例说明。
动态绑定,使用父类引用指向子类对象,再调用某一父类中的方法时,不同子类会表现出不同结果。这样拓展性好。
运行时多态一般通过方法重写实现,如
class man{
void attach(){
System.out.println( "this man attach with a punch" );
}}
class caster extends man{
void attach(){
System.out.printkn( "this caster attach with magic");
}}
........
当有一个方法为
void play(man a){
a.attch();
}
编译运行时,编译器会根据方法的形式参数动态绑定,由man父类引用指向不同职业比如caster的子类对象,
表现不同攻击效果。
4. 自定义一个类,覆写equals方法,以满足自身业务需求
class point{
private int x,y;
public boolean equals(point a){
if(this.x==a.x && this.y==a.y){
return True;
}else{
return False;
}
}
5. 举例说明运算符instanceof的使用场景。
instanceof 用于判断对象是否为某一类 ,得到一个boolean的值;
e.g. 父类: Account 子类: CAccount
Account a ;
CAccount b ;
boolean result1 = b instanceof Account; // result1 = True; 子类对象是父类实例
boolean result2 = a instanceof CAcount; //result2 = False; 父类对象不是子类实例
6. 谈谈抽象类与接口的异同以及两者的使用场景。
- 抽象类是一个特殊的类,抽象类中可以包含没有方法体的方法(抽象方法)
- 接口可以理解成一个特殊的抽象类,特殊在,接口里的都是抽象方法,没有普通方法,接口会为方法自动拼接public abstract,还会为变量自动拼接public final static
- 抽象类可以有成员变量成员常量 接口只能有静态常量
- 抽象类可以有构造方法,接口中没有构造方法
- 抽象类和接口都不能实例化(创建对象)
- 类只能单继承,接口可多继承接口,且一个类可以实现多接口
- 抽象类是重构的结果,接口是设计的结果