一、实验题目
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