如何实现两个对象之间互发消息,请举例说明
通过对象引用的方法,创建两个类,这两个类中都包含另一个类的成员。
class A{
private B b;
public void setB(B_b){
if(_b!-null){b=_b}
}
public B getB(){
if(b!=null){return b}
else return null;
}
}
class B{
A a;
public B(A aa){
this.a=aa;
aa.setB(this);
}
谈谈组合与继承的区别以及两者的使用场景
子类继承父类,父类的所有属性和方法都可以被子类访问和调用。组合是指将已存在的类型作为一个新建类的成员变量类型,又叫“对象持有”。
例如当类是一个房子时,组合的类可以有窗户,门,桌子等。而继承的类是别墅,海景房等。
Java中的运行时多态的含义是什么?有什么作用?
JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态。具体一点就是子类方法重写了父类方法。使用父类引用指向子类对象,再调用某一父类中的方法时,不同子类会表现出不同结果。它使得许多事情在运行时就被得以解决,提供了更大的灵活性。
使用接口改写例6.8中的程序。
package Interface;
import java.applet.Applet;
import java.awt.*;
interface Shape {
public abstract double getArea();
public abstract double getPerimeter();
}
class Rect implements Shape {
public int x, y, k;
public double m;
public Rect(int x,int y,int k,double m) {
this.x = x;
this.y = y;
this.k = k;
this.m = m;
}
public double getArea() {
return (k*m);
}
public double getPerimeter() {
return (2*(x+y));
}
}
class Triangle implements Shape {
public int a, b, c;
public double m;
public Triangle(int a,int b,int c) {
this.a = a;
this.b = b;
this.c = c;
this.m = (a + b + c)/2.0;
}
public double getArea() {
return (Math.sqrt(m*(m-a)*(m-b)*(m-c)));
}
public double getPerimeter() {
return (a+b+c);
}
}
class Circle implements Shape {
public int x, y, d;
public double r;
public Circle(int x,int y,int d) {
this.x = x;
this.y = y;
this.d = d;
this.r = d/2.0;
}
public double getArea() {
return (Math.PI*r*r);
}
public double getPerimeter() {
return (2*Math.PI*r);
}
}
class RunShape extends Applet {
Rect rect = new Rect(5,15,25,25);
Triangle tri = new Triangle(5,5,8);
Circle cir = new Circle(13,90,25);
public void init(){
}
private void drawArea(Graphics g,Shape s,int a,int b) {
g.drawString(s.getClass().getName()+" Area"+s.getArea(),a,b);
}
private void drawPerimeter (Graphics g,Shape s,int a,int b) {
g.drawString(s.getClass().getName()+" Perimeter"+s.getPerimeter(),a,b);
}
public void paint(Graphics g) {
g.drawRect(rect.x,rect.y,rect.k,(int)rect.m);
g.drawString("Rect Area:"+rect.getArea(),50,35);
g.drawString("Rect Perimeter:"+rect.getPerimeter(),50,55);
g.drawString("Triangle Area:"+tri.getArea(),50,75);
g.drawString("Triangle Perimeter:"+tri.getPerimeter(),50,95);
g.drawOval(cir.x-(int)cir.d/2,cir.y-(int)cir.d/2,cir.d,cir.d);
g.drawString("Circle Area:"+cir.getArea(),50,115);
g.drawString("Circle Perimeter:"+cir. getPerimeter(),50,135);
}
}
简述运算符instanceof的使用场景
instanceof是一个二元运算符,用来判断对象是否为特定类的实例。
如·:
class A{…}
A a=new A();
boolean PD=a instance of A;