面向对象(十一)

67 阅读2分钟

继承(extend)

面向对象的特征之二:继承性

一、继承性的好处

① 减少了代码的冗余,提高代码的复用性

② 便于功能拓展

③ 为之后多态性的使用,提供了前提


二、继承性的格式:class A extends B { }

A:子类、派生类、subclass

B:父类、超类、基类、superclass

2.1 体现:一旦子类A继承父类B以后,子类A中就获取了父类中获取了父类B中声明的所有属性和方法

特别的,父类中声明为private的属性或方法,子类继承父类以后,仍然认为获取了父类中的私有结构。只是因为封装性的影响,使得子类不能直接调用父类的结构而已。

2.2 子类继承父类以后,还可以声明自己特有的属性或方法。子类与父类的关系,不同于子集与集合的关系

extends:延展、拓展


三、Java中关于继承性的规定

1.一个类可以被多个子类继承。

2.Java中类的单继承性:一个类只能有一个父类

3.多层继承关系:子父类是相对概念。

4.子类直接继承的类叫直接父类,间接继承的类叫间接父类

5.子类继承父类以后,就获取了直接父类以及间接父类中声明的属性和方法


四、Object类(根父类)

  1. 如果我们没有显式的声明一个类的父类,则此类继承于java.lang.Object类。
  2. 所有的java类(除java.lang.Object类之外)都是直接或间接的继承于java.lang.Object类。
  3. 意味着,所有java类具有java.lang.Object类声明的功能。

求圆柱体积

Circle.java(父类)

package Test03;

public class Circle {

    private double radius;
    public Circle(){
        radius = 1.0;
    }

    public double getRadius() {
        return radius;
    }

    public void setRadius(double radius) {
        this.radius = radius;
    }
    public double findArea(){
        return Math.PI*Math.pow(radius,2);
    }
}

Cylinder.java(子类)

import java.util.Scanner;
public class Cylinder extends Circle{
    private double length;
    public Cylinder() {
        length = 1;
    }

    public double getLength() {
        return length;
    }

    public void setLength(double length) {
        this.length = length;
    }
    public double findVolume(){
        return findArea()*length;
    }

    public static void main(String[] args) {
        Cylinder cylinder = new Cylinder();
        Scanner sc =new Scanner(System.in);
        System.out.println("请输入底面半径:");
        double radius = sc.nextDouble();
        System.out.println("请输入圆柱高度:");
        double length = sc.nextDouble();
        cylinder.setRadius(radius);
        cylinder.setLength(length);
        System.out.printf("圆柱的体积为:%.2f",cylinder.findVolume());
    }
}