1、如何实现两个对象之间互发消息,请举例说明。
使用this关键字来表示当前对象,实现两个对象之间互发消息。举例如下:
class FighterPlane {
private String name;
private int missileNum;
private A a;
public void setA(A_a) {
if (a_ != null) { a = _a ;}
}
public A getA(){
if (a != null) {
return a;
}
else {
return null;
}
}
//以下两个方法不是本里的重点,因此仅进行简要说明
public void fire(){......}
public FighterPlane(String _name,int _missileNum) {......}
class A{
FighterPlane fp;
public A(FighterPlane fpp) {
this.fp = fpp;
fpp.setA(this);//将当前对象传给FighterPlane
}
public void invoke() {
//A中对象发送消息给FighterPlane的对象
fp.fire();
}
}
public class Run{
public static void main(String[] args){
FighterPlane ftp = new FighterPlane ("su35",10);
A a = new A(ftp);
a.invoke();
}
}
2、谈谈组合与继承的区别以及两者的使用场景(即什么时候宜用组合?什么时候宜用继承?)。
- 组合使用场景:仅需要使用某个类的某些属性及方法,而无需对这些方法进行修改;
- 继承使用场景:不仅需要用到所继承父类的属性和方法,还需要对它们进行完善和修改,创建出更为具体的子类。
3、Java中的运行时多态的含义是什么?有什么作用?请举例说明。
- 含义
在运行时才可以确定执行哪个方法的多态即为运行时多态。使用父类引用指向子类对象,再调用某一父类中的方法时,不同子类会表现出不同结果。 - 作用
扩展性极好。 - 举例如下
class Person{
String type = "P";
public String getName() {
String name = "Person";
return name;
}
}
class Man extends Person{
String type = "M";
public String getName(){
String name = "Man";
return name;
}
public String newName(){
return "newName";
}
}
public class Test {
public static void main(String[] args) {
Person p = new Man(); // 父类的对象引用指向了子类对象
System.out.println(p.type); //返回结果为P
System.out.println(p.getName()); //返回结果为Man
System.out.println(((Man)p).newName()); //
}
}
4、简述运算符instanceof的使用场景。
当同一个父类(一般是抽象类)被多个子类继承时,需要定义函数来对不同的子类进行不同的操作,此时需要判断该函数所接收的对象是哪个子类的实例,便可以对不同子类的实例进行不同的操作。