Java面试题必知,常见Java继承面试题_极悦注册
专注Java教育14年 全国咨询/投诉热线:444-1124-454
极悦LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 Java面试题必知,常见Java继承面试题

Java面试题必知,常见Java继承面试题

更新时间:2020-08-05 15:47:43 来源:极悦 浏览2918次

下面这段代码的输出结果是什么?

public class Test {
    public static void main(String[] args)  {
        new Circle();
    }
}
 
class Draw {
     
    public Draw(String type) {
        System.out.println(type+" draw constructor");
    }
}
 
class Shape {
    private Draw draw = new Draw("shape");
     
    public Shape(){
        System.out.println("shape constructor");
    }
}
 
class Circle extends Shape {
    private Draw draw = new Draw("circle");
    public Circle() {
        System.out.println("circle constructor");
    }
}


运行结果
shape draw constructor
shape constructor
circle draw constructor
circle constructor

父类的构造器调用以及初始化过程一定在子类的前面。

由于Circle类的父类是Shape类,所以Shape类先进行初始化,然后再执行Shape类的构造器。接着才是对子类Circle进行初始化,最后执行Circle的构造器。

2.下面这段代码的输出结果是什么?

public class Test {
    public static void main(String[] args)  {
        Shape shape = new Circle();
        System.out.println(shape.name);
        shape.printType();
        shape.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
shape
this is circle
shape
1.对于这个例子,静态绑定的过程是:java文件编译时,编译器检查出引用shape的静态类型是Shape类,由于将printName()方法和父类Father关联起来。也就是说,程序运行前编译器是无法检查出引用shape的动态类型的,所以会直接调用静态类型中对应的方法。

2.覆盖只针对非静态方法,而隐藏是针对成员变量和静态方法的。

3.覆盖和隐藏之间的区别是:覆盖受RTTI约束的,而隐藏却不受该约束。也就是说只有覆盖方法才会进行动态绑定,而隐藏是不会发生动态绑定的。

Java面试题必知,常见Java继承面试题

以上就是极悦java培训机构的小编针对“Java面试题必知,常见Java继承面试题”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>