2022.01.06多态练习

1.什么是多态性?什么是虚拟方法调用?

①父类的引用指向子类的对象;

②父类引用的对象调用子类中同名的方法时,优先调用的是子类重写的方法。

 

对象的多态性:父类的引用指向子类的对象。

Person p = new Man();

p.eat();

调用方法时,编译时看左边,运行时看右边。

2.一个类可以有几个直接父类?(一个)

一个父类可有多少个子类?(多个)

子类能获取直接父类的父类中的结构吗?(可以)

子类能否获取父类中private权限的属性或方法?(可以)

 

3.方法的重写(override/overwrite)的具体规则有哪些?

①不能重写父类中声明为private、final的方法;

②重写方法的参数列表、名称必须和父类相同;

 

方法名、形参列表相同

权限修饰符

返回值

抛出的异常

4.super调用构造器,有哪些具体的注意点?

super在构造器中必须声明在首行,不能和this同时使用;

 

this(形参列表):本类重载的其它的构造器

super(形参列表):调用父类中指定的构造器

5.在下面的代码结构中:使用关键字:this,super;方法的重写;继承;

2022.01.06多态练习

 

 

public class Circle {
    private double radius;

    public Circle() {

    }

    public Circle(double radius) {
        this.radius = 1;
    }

    public double getRadius() {
        return radius;
    }

    public void setRadius(double radius) {
        this.radius = radius;
    }

    public double findArea(double radius) {
        return Math.PI * radius * radius;
    }
}

class Cylinder extends Circle {
    private double length;

    public Cylinder() {

    }

    public Cylinder(double length) {
        super(1);
        this.length = 1;
    }

    public double getLength() {
        return length;
    }

    public void setLength(double length) {
        this.length = length;
    }

    public double findVolume(double radius, double length) {
        return super.findArea(radius) * length;
    }

    public double findArea(double radius) {
        return super.findArea(radius) * 2 + Math.PI * 2 * radius * length;
    }
}

class CircleTest {
    public static void main(String[] args) {
        Cylinder cyc = new Cylinder(1);
        System.out.println(cyc.findArea(cyc.getRadius()));
    }
}

 

上一篇:glide 4.0 之后 和圆角裁剪CenterCrop冲突


下一篇:2022-01-05学习心得