Java期末冲刺!复习重点:类的继承

一、实验题目

1、设计一个学生类Student和它的一个子类Undergraduate,要求如下:

(1)Student类具有name和age属性,一个包含两个参数的构造方法,用于给name和age属性赋值,一个show方法打印Student的属性信息。

(2)本科生类Undergraduate中增加一个degree学位属性。有一个包含三个参数的构造方法,前两个参数用于给继承的name 和age属性赋值,第三个参数用于给degree专业赋值,一个show方法用于打印Undergraduate,的属性信息。

(3) 在测试类中分别创建Student对象和Undergraduate对象,调用他们的show方法。

2..根据下面的要求实现圆类Circle

(1)封装圆类Circle,Circle的成员变量:radius表示圆的半径。

圆类Circle的方法成员

Circle():构造方法,将半径置0

Circle(double r):构造方法,创建Circle对象时将半径初始化为r

double getRadius():获得圆的半径值

double getPerimeter():获得圆的周长

void disp():将圆的半径、圆的周长和圆的面积输出到屏幕

(2)继承第(1)题中的圆Circle类,派生圆柱体类Cylinder。要求如下:

圆柱体类Cylinder的成员变量:height表示圆柱体的高。

圆柱体类Cylinder的成员方法:

Cylinder(double r,double h)构造方法,创建Cylinder对象时将圆半径初始化为r,圆柱高初始化为h

double getHeight():获得圆柱体的高

double getVol():获得圆柱体的体积

void dispVol():将圆柱体的体积输出到屏幕

3)编写测试类,以键盘的输入值作为圆的半径和圆柱体的高,计算圆柱体的体积。

二、解题代码

第一题

class Student {
    String name;
    int age;
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void show() {
        System.out.println("学生姓名:" + name + ",年龄:" + age);
    }
}
class Undergraduate extends Student {
    private String degree;

    public Undergraduate(String name, int age, String degree) {
        super(name, age);
        this.degree = degree;
    }
    @Override
    public void show() {
        System.out.println("本科生姓名:" + name + ",年龄:" + age + ",学位:" + degree);
    }
}
public class Main {
    public static void main(String[] args) {
        Student student = new Student("小李", 18);
        student.show();
        Undergraduate undergraduate = new Undergraduate("大壮", 20, "工学学士");
        undergraduate.show();
    }
}

第二题


import java.util.Scanner;
public class Test {

    public static class Circle {
        // 成员变量:圆的半径
        private double radius;
        // 默认构造方法,将半径置为0
        public Circle() {
            this.radius = 0;
        }
        // 带参数的构造方法
        public Circle(double r) {
            this.radius = r;
        }
        // 获得圆的半径
        public double getRadius() {
            return radius;
        }
        // 获得圆的周长
        public double getPerimeter() {
            return 2 * Math.PI * radius;
        }
        // 输出圆的半径、周长和面积
        public void disp() {
            double area = Math.PI * radius * radius;
            System.out.println("半径: " + radius);
            System.out.println("周长: " + getPerimeter());
            System.out.println("面积: " + area);
        }
    }
    public static class Cylinder extends experiment6.Circle {
        // 成员变量:圆柱体的高
        private double height;
        // 构造方法
        public Cylinder(double r, double h) {
            super(r); // 初始化圆的半径
            this.height = h;
        }
        // 获得圆柱体的高
        public double getHeight() {
            return height;
        }
        // 获得圆柱体的体积
        public double getVol() {
            return getRadius() * getRadius() * Math.PI * height;
        }
        // 输出圆柱体的体积
        public void dispVol() {
            System.out.println("体积: " + getVol());
        }
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 输入圆的半径
        System.out.print("请输入圆的半径:");
        double radius = scanner.nextDouble();
        // 输入圆柱体的高
        System.out.print("请输入圆柱体的高: ");
        double height = scanner.nextDouble();
        // 创建Circle对象
        Circle circle = new Circle(radius);//当Circle类非静态,此处报错。解决方法有两种:
                                       //1.去掉main方法的static
                                       //2.将Circle类设为静态static
        // 显示圆的信息
        circle.disp();
        // 创建Cylinder对象
        Cylinder cylinder = new Cylinder(radius, height);//当Cylinder类非静态,此处报错
        // 显示圆柱体的体积
        cylinder.dispVol();
        scanner.close();
    }
}

补充:

1.类的封装

指将对象(类)的状态(行为方法)写在该对象(类)的内部。

具体实现过程:在定义一个类时,将类的属性私有化(private关键字修饰)。私有属性只能在它的所在的类中被访问。如果外界访问私有属性,需要提供一些使用public修饰的公有方法,其中包括用于获取属性值的getter方法和设置属性值的setter方法。

2.类的继承

(1)方法的重写:

在继承关系中,子类会自动继承父类中定义的方法,但有时候子类中需要对继承的方法进行一些修改,即对父类的方法进行重写。

(2)super关键字

当子类重写父类的方法后,子类对象将无法访问父类中被子类中重写的方法。这时,使用super关键字可以在子类中访问父类的非私有方法、非私有属性以及构造方法。

如, super.属性 访问父类非私有属性

        super.方法(参数1,参数2,·····)调用父类非私有方法

        super(参数1,参数2,···) 调用父类的构造方法

说明:复习内容基于本人实际学习情况,发布文章仅用于记录。如有错误,欢迎纠正。

第三部分:类的继承(重点)

实验6

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值