import java.util.*;
public class ColorPoint extends Point{
private String color;
public ColorPoint(int x,int y,String color){
super(x,y);
this.color = color;
}
public String makeName(){
return super.makeName() + ":" + color;
}
public static void main(String[] args){
System.out.println(new ColorPoint(4,2,"purple"));
}
}
class Point{
private int x,y;
private String name;
public Point(int x,int y){
this.x = x;
this.y = y;
name = this.makeName();
if(this instanceof ColorPoint){
System.out.println("ColorPoint");
}else
System.out.println("Point");
}
protected String makeName(){
return "["+x+","+y+"]";
}
public String toString(){
return name;
}
}
为什么会输出ColorPoint?如果this指代了ColorPoint的实例,那么this.x又怎么能访问到x呢,x是private啊,怎么会被ColorPoint访问呢?
搞不明白这些的作用域,和在哪能访问
this指ColorPoint,但是x却不是ColorPoint的属性,怎么可以使用this.x访问呢?
追答在ColorPoint没有直接使用this.x访问x啊,你没看到在ColorPoint类的构造方法中是用super(x,y)调用超类的构造方法么,再makename方法中也是调用了超类的makename方法,没有直接访问
追问我的意思是,“.”表示取属性,那么this.x就表示x是this的属性,那么这样的话不就跟“this是ColorPoint类型“相矛盾吗?因为x不是ColorPoint的属性。
追答这个你就理解错了,子类对象可以赋值给父类对象,这一点也很好理解,有颜色的点也是点,你可以写Point p=new ColorPoint(),这就是多态
本回答被提问者采纳