Java实验报告
实验四类的继承
一、 实验目的
(1) 掌握类的继承方法;
(2) 变量的继承和覆盖,方法的继承、重载和覆盖实现;
二、 实验内容
三、实验过程(请自己调整格式)
代码:
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 }
运行结果:
代码:
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 }
运行结果:
遇到的问题:
做完Circle类还是很容易,当做到Cylinder类,我类比Circle类的代码,但是在运行时,它的结果还是Circlel类的结果(父类和子类都在同一个文件夹里),但,把父类和子类的代码合并在一起,运行的结果就只有子类的答案。
问题原因:
public statci void main (String[] args)是主函数入口,在继承无需添加
四、总结
1、抽象类:
定义:若方法只有方法名字,形参列表,没有方法体,那所在的类就被定义为抽象类。
抽象类关键字abstract声明
- 一个类继承于抽象类,就不能继承于其他的(抽象)类。
- 子类可以继承于抽象类,但是一定要实现父类们所有abstract的方法。反之,则子类必为抽象类
- 只有实现父类所有抽象方法,才变成完整类
2、接口类
定义:如果类的所有方法都没有实现,那么这个类就算是接口
接口类关键字interface
- 类只可以继承一个类,但是可以实现(implements)多个接口,继承和实现可以同时(实现多个接口,必须实现接口中所定义的所有方法)
- 接口是一种“特殊”的类
- 接口设计是为了弥补单根继承的不足
- extends必须写在Implements前面
- 继承多个接口,相当于将多个接口中未实现的方法都“承载”过来,否则会变成abstract类
3、抽象类和接口相同点:
两者都不能被实力化,不能new操作
4、抽象类和接口不同点:
- 抽象类可以有部分方法实现,接口所有方法不能有实现
- 一个类只能继承一个(抽象)类,实现多个接口
- 抽象类有构造函数,接口没有构造函数
- 抽象类可以有main,也能运行,接口没有main函数
- 抽象类方法有可以有private/protected,接口方法都是public