注意点1
父类中的private变量和方法,父类本身的对象是无法直接调用的,自然指向子类对象的父类引用也是无法访问父类中的private变量和方法。
注意点2
子类扩展父类的变量和方法,该引用是无法调用的。
public class Point {
private int x;
private final int y;
public Point(int x,int y) {
this.x= x;
this.y= y;
}
}
Point是父类,在实现一个它的子类。
public class ColorPoint extends Point{
public int color;
public ColorPoint(int x, int y,int color) {
super(x, y);
// TODO Auto-generated constructor stub
this.color = color;
}
public int getColor() {
return color;
}
}
ColorPoint中的color和getColor()方法是扩展父类Point的。于是,其中
Point cp = new ColorPoint(3,4,5);
cp是无法访问getColor()和color的。
注意点3
指向子类对象的父类引用只会调用在子类的方法。如果子类覆盖了父类的方法,该引用只会取得被覆盖了的方法。对于子类继承过来并没有覆盖的方法,则已经是子类所拥有,该引用直接调用。
public class Point {
public int x;
public int y;
public Point(int x,int y) {
this.x= x;
this.y= y;
}
public void method() {
System.out.println("父类");
}
public void method1() {
System.out.println("父类方法没有被覆盖");
}
}
父类method()方法将被子类覆盖。
public class ColorPoint extends Point{
public int color;
public int x;
public ColorPoint(int x, int y,int color) {
super(x, y);
// TODO Auto-generated constructor stub
this.color = color;
}
@Override
public void method() {
System.out.println("子类覆盖父类方法");
}
}
最后进行打印输出
Point cp1 = new ColorPoint(4,8,9);
cp1.method();
cp1.method1();
//输出结果
//子类覆盖父类方法class com.kdk.java.ColorPoint
//父类方法没有被覆盖class com.kdk.java.ColorPoint
注意点4
在向上转型中,如果子类具有和父类定义一样的变量时,该变量时无法被继承的。要获得该定义相同的变量在子类对象中的值,则需通过get()方法,而通过.的方式取得是该定义相同的变量在父类中的值。
public class Point {
public int x;
public int y;
public Point(int x,int y) {
this.x= x;
this.y= y;
}
public int getY() {
return y;
}
}
public class ColorPoint extends Point{
public int color;
public int x = 8;
public int y = 9;
public ColorPoint(int x, int y,int color) {
super(x, y);
// TODO Auto-generated constructor stub
this.color = color;
}
public int getY() {
return y;
}
}
public class Main {
public static void main(String[] args) {
Point cp = new ColorPoint(3,4,5);
System.out.println(cp.x+"");//输出3
System.out.println(cp.y);//输出4
System.out.println(cp.getY()+"");//输出9
}
}
未完待续….