第六周作业
第四次实验报告
一.实验目的
(1)掌握类的继承方法
(2)变量的继承和覆盖,方法的继承,重载和覆盖实现
二.实验内容
(1)根据下面的要求实现圆类 Circle.
① 圖类Cirele的成员变量:radius表示圆的半径。
圆类Circle 的方法成员:
Circle():构造方法,将半径置0
Circle(doubler):构造方法,创建 Circle 对象时将半径初始化为r
double gerRadius();获得圆的半径值
double gesiPerimeter():获得圆的周长
voiddisp():将圈的半径、圖的周长和圆的面积输出到屏幕
实验代码
package 官方;
import java.util.Scanner;
public class Circle {
private double radius;
public Circle(){
this.setRadius(0);
}
public Circle(double r){
this.setRadius(r);
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
public double getPerimeter() {
return getRadius()*2*Math.PI;
}
public double getArea() {
return Math.PI*getRadius()*getRadius();
}
public void disp(){
System.out.println("圆的半径:"+getRadius());
System.out.println("圆的周长:"+getPerimeter());
System.out.println("圆的面积: "+getArea());
}
}
public class Test {
public static void main(String[] args){
System.out.println("输入圆的半径");
Scanner sc=new Scanner(System.in);
double r=sc.nextDouble();
Circle Cy=new Circle(r);
Cy.disp();
}
}
运行结果
这道题就是简单的考查构造方法,我觉得属性一定要封装,养成一个好习惯
(2)继承第(1)题中的圆Circle 类,派生圆柱体类Cylinder。要求如下:
① 圆柱体类 Cylinder的成员变量:height 表示圆柱体的高。
圆柱体类 Cylinder 的成员方法;
Cylinder(doubler doubleh)构造方法,创建Cylinder对象时将圆半径初始化为r,圆柱高初始化为为 h
double geitteight():获得圖柱体的高
double getVol():获得圆柱体的体积
voiddispVol():将國柱体的体积输出到屏幕
(3)按照第(2)题的Cylinder 类,接上键盘的输入值作为圆的半径和圆柱体的高,计算圆柱体的体积。
实验代码
package 官方;
import java.util.Scanner;
public class Cylinger extends Circle{
private double height;
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
Cylinger (double r,double h){
this.setRadius(r);
this.setHeight(h);
}
public double getVol(){
return getArea()*getHeight();
}
public void dispVol(){
System.out.println("圆柱的体积:"+getVol());
}
}
public class Test {
public static void main(String[] args){
System.out.println("输入圆的半径");
Scanner sc=new Scanner(System.in);
double r=sc.nextDouble();
System.out.println("输入圆柱的高");
double h=sc.nextDouble();
Cylinger Cy=new Cylinger(r,h);
Cy.dispVol();
}
}
运行结果截图
这道题考的是继承,方法和上题一样,我觉得老师上节课讲的那个子类与父类之间的转换,我还不是很懂,重点是建了太多类了,我脑子反应不过来;
三、结论
这周我们重点学习了多态性,它分为两种:
一,方法的重载和复写;
对于java的重载主要用于增加程序的可读性,让他看起来更好看;
java的复写很好理解,就是在父类与子类,子类定义了与父类同名的方法,子类复写的方法不能拥有比父类更严格的访问权限
二,对象的多态性;
多态在对象中是多种表现的形式,在同一个事件发生在不同的对象上是会产生不同的结果,它的优点很多有可替代性,扩充性,接口性,灵活性,简化性。当使用多态性调用方法时,首先检查父亲中是否有该类的方法,多态的好处可以使程序有良好的扩展,并可以所有的类的对象进行通用处理。
public class Test {
public static void main(String[] args) {
show(new Cat()); // 以 Cat 对象调用 show 方法
show(new Dog()); // 以 Dog 对象调用 show 方法
Animal a = new Cat(); // 向上转型
a.eat(); // 调用的是 Cat 的 eat
Cat c = (Cat)a; // 向下转型
c.work(); // 调用的是 Cat 的 work
}
public static void show(Animal a) {
a.eat();
// 类型判断
if (a instanceof Cat) { // 猫做的事情
Cat c = (Cat)a;
c.work();
} else if (a instanceof Dog) { // 狗做的事情
Dog c = (Dog)a;
c.work();
}
}
}
abstract class Animal {
abstract void eat();
}
class Cat extends Animal {
public void eat() {
System.out.println("吃鱼");
}
public void work() {
System.out.println("抓老鼠");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("吃骨头");
}
public void work() {
System.out.println("看家");
}
}
输出结果
吃鱼
抓老鼠
吃骨头
看家
吃鱼
抓老鼠