Java实验报告

 

实验四类的继承

一、 实验目的

(1)       掌握类的继承方法;

(2)       变量的继承和覆盖,方法的继承、重载和覆盖实现;

二、 实验内容

类的继承实验报告java猫和狗案例 类的继承实验总结_类的继承实验报告java猫和狗案例

 

 

类的继承实验报告java猫和狗案例 类的继承实验总结_父类_02

三、实验过程(请自己调整格式)

代码:

1 package com.company;
 2 
 3 public class Circle
 4 {
 5    double radius,perimeter,area;
 6 
 7     Circle()                                     //构造Circle()对象
 8     {
 9         radius = 0;
10     }
11     Circle(double r)
12     {
13         radius = r;                              //将半径初始化为r
14     }
15     double getRadius()
16     {
17        return radius;                            //获得圆的半径
18     }
19     double getPerimeter()
20     {
21        return 2*Math.PI*radius;                   //获得圆的周长
22     }
23     double getArea()
24     {
25        return radius*radius*Math.PI;              //获得圆的面积
26     }
27 
28    public void disp()                               //disp函数会直接将内容输出
29    {
30        perimeter = getPerimeter();
31        area = getArea();
32        System.out.print("圆的半径为:"+radius+"\n"+"周长:"+perimeter+"\n"+"面积为:"+area);
33    }
34    public  static void main(String[] args)
35    {
36        double radius = 1.0;
37        Circle c =new Circle(radius);         //将全部radius变为Circle
38        c.disp();
39    }
40 }

 

 

 运行结果:

类的继承实验报告java猫和狗案例 类的继承实验总结_抽象类_03

 代码:

1 package com.company;
 2 
 3 class Circle
 4 {
 5     double radius,perimeter,area;
 6 
 7     Circle()                                     
 8     {
 9         radius = 0;
10     }
11     Circle(double r)
12     {
13         radius = r;                              
14     }
15     double getRadius()
16     {
17         return radius;                           
18     }
19     double getPerimeter()
20     {
21         return 2*Math.PI*radius;                   
22     }
23     double getArea()
24     {
25         return radius*radius*Math.PI;             
26     }
27 
28     public void disp()                               
29     {
30         perimeter = getPerimeter();
31         area = getArea();
32         System.out.print("圆的半径为:"+radius+"\n"+"周长:"+perimeter+"\n"+"面积为:"+area);
33     }
34     public void CC()                                //构造函数,输出我想要数值
35     {
36         double radius = 1.0;
37         Circle c =new Circle(radius);         
38         c.disp();
39     }
40 }
1 package com.company;
 2 
 3 public class Cylinder extends Circle
 4 {
 5     private double height;
 6     public Cylinder(double h,double r)
 7     {
 8         this.radius = r;
 9         this.height = h;
10     }
11     public double getHeight()
12     {
13         return this.height;
14     }
15     public double getVol()
16     {
17         return radius*radius*Math.PI*height;
18     }
19     public void disp()
20     {
21         double Vol = getVol();
22         System.out.println("圆柱体的体积为:"+Vol);
23     }
24     public static void main(String[] args)
25     {
26         Cylinder cy =new Cylinder(2.0,1.0);
27         cy.disp();
28         cy.CC();                                 //调用父类里的函数
29     }
30 }

运行结果:

类的继承实验报告java猫和狗案例 类的继承实验总结_类的继承实验报告java猫和狗案例_04

 遇到的问题:

做完Circle类还是很容易,当做到Cylinder类,我类比Circle类的代码,但是在运行时,它的结果还是Circlel类的结果(父类和子类都在同一个文件夹里),但,把父类和子类的代码合并在一起,运行的结果就只有子类的答案。

 

类的继承实验报告java猫和狗案例 类的继承实验总结_父类_05

 

类的继承实验报告java猫和狗案例 类的继承实验总结_Math_06

 

类的继承实验报告java猫和狗案例 类的继承实验总结_类的继承实验报告java猫和狗案例_07

 问题原因:

public statci void main (String[] args)是主函数入口,在继承无需添加

四、总结

1、抽象类:

定义:若方法只有方法名字,形参列表,没有方法体,那所在的类就被定义为抽象类。

抽象类关键字abstract声明

  • 一个类继承于抽象类,就不能继承于其他的(抽象)类。
  • 子类可以继承于抽象类,但是一定要实现父类们所有abstract的方法。反之,则子类必为抽象类
  • 只有实现父类所有抽象方法,才变成完整类

2、接口类

定义:如果类的所有方法都没有实现,那么这个类就算是接口

接口类关键字interface

  • 类只可以继承一个类,但是可以实现(implements)多个接口,继承和实现可以同时(实现多个接口,必须实现接口中所定义的所有方法)
  • 接口是一种“特殊”的类
  • 接口设计是为了弥补单根继承的不足
  • extends必须写在Implements前面
  • 继承多个接口,相当于将多个接口中未实现的方法都“承载”过来,否则会变成abstract类

3、抽象类和接口相同点:

两者都不能被实力化,不能new操作

4、抽象类和接口不同点:

  • 抽象类可以有部分方法实现,接口所有方法不能有实现
  • 一个类只能继承一个(抽象)类,实现多个接口
  • 抽象类有构造函数,接口没有构造函数
  • 抽象类可以有main,也能运行,接口没有main函数
  • 抽象类方法有可以有private/protected,接口方法都是public