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