Java中的继承与向上转型

好多天没写过博客了。。。

话说今天博主智商下线了,连一道简单的继承的题都弄错,下来我们来看看这道题

public class day01_1 {
    public static void main(String[] args) {
        Shape sh = new circle();
        System.out.println(sh.name);
        sh.printType();
        sh.printName();
    }
}
class Shape{
    public String name = "shape";

    public Shape(){
        System.out.println("shape constructor");
    }

    public void printType() {
        System.out.println("this is shape");
    }

    public static void printName() {
        System.out.println("shape");
    }
}

class circle extends Shape{
    public String name = "circle";

    public circle(){
        System.out.println("circle constructor");
    }

    public void printType() {
        System.out.println("this is circle");
    }

    public static void printName(){
        System.out.println("circle");
    }
}

我本以为输出为

shape constructor

circle  constructor

circle

this is circle

shape

但是我被打脸了,输出结果为下

Java中的继承与向上转型_第1张图片

当时我就很纳闷,为什么name属性会输出shape,之后找了找原因才发现:

因为指向子类的引用向上转型变成了shape,所以他只能访问父类的属性和方法

所以它才会输出shape

虽然没什么大知识,但是蚊子腿也是肉嘛,每天进步一点点。

你可能感兴趣的:(Java相关)