指向子类对象的父类引用(向上转型)

注意点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
    }
}

未完待续….

你可能感兴趣的:(java基础)