接口方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JAVA上机实验
实验名称:抽象类、接口与内部类
实验目的:掌握抽象类、接口的定义、实现与使用;掌握内部类的创建;理解接口和继承的混合使用。
一、实验内容:
•1、定义接口Shape,其中包括一个方法size(),设计“矩形”、“圆”、“圆柱体”等类实现Shape接口,其size()方法分别表示计算矩形面积、圆面积、圆柱体的体积。分别创建代表“矩形”、“圆”、“圆柱体”的三个对象存入一个Shape类型的数组中,通过调用size()方法将数组中各类图形的大小输出。
public Juxing(double l,double w,double h){
this.length=l;
this.width=w;
this.height=h;
}
//实现接口的方法
public double size(){
return length*width*height;
}
}
package test;
//定义Employee类数组
Employeeemployee[];
doublesal=0;
//创建构造方法
publicCompany(Employee[] employee) {
this.employee= employee;
}
//成员对应的构造方法
publicdoublesalPay(){
sal=0;
System.out.println("矩形的宽"+k.width);
System.out.println("圆的半径"+y.round);
System.out.println("圆柱的半径"+z.round);
System.out.println("圆柱的高"+z.high);
System.out.println("矩形的长"+k.length);
//获得对象的类名,直接引用Object类里的对象名。getClass,getName()
System.out.println("f[0]类名"+f[0].getClass().getName());
System.out.println("f[1]类名"+f[1].getClass().getName());
System.out.println("数组的长度"+s.length);
System.out.println("矩形的体积"+s[0].size());
System.out.println("圆形的体积"+s[1].size());
System.out.println("圆柱的体积"+s[2].size());
2.下转型实际就是将父类转换成子类(将父类的对象赋值给子类使用)
3、掌握上转型对象的使用:要求有一个abstract类,类名为Employee。Employee的子类有YearWorker、MonthWorker和WeekWorker。YearWorker对象按年薪领取薪水,MonthWorker按月领取薪水,WeekWorker按周领取薪水。Employee类有一个abstract方法:Public abstract earnings();子类必须重写父类的earnings()方法,给出各自领取报酬的具体方式。有一个Company类,该类用Employee数组作为成员,Employee数组的单元可以是YearWorker对象的上转型对象、MonthWorker对象的上转型对象或WeekWorker对象的上转型对象。程序能输出Company对象一年需要支付的薪水总额。
publicPeach(doubleweight) {
this.weight= weight;
}
//实现抽象方法
publicdoublegetWeight(){
Returnweight;
}
}
packagetwo;
publicclassTest {
publicstaticvoidmain(String[] args){
//创建数组对象
Employee employee[]=newEmployee[20];
//将for(inti=0;i<employee.length;i++){
if(i%3==0)
employee[i]=newWeekWorker();
elseif(i%3==1)
employee[i]=newMonthWorker();
}
}
•知识点:对象的类型转换分为两种:上转型(自动转换)和下转型(强制转换)
1.上转型实际就是子类转换成父类:(1)向上转型对象不能操作自雷中的新成员变量,也不能使用子类新增的成员方法(2)上转型对象可以操作子类继承或隐藏的成员变量,也可以使用子类继承的或重写的方法。即为上转型对象可以操纵父类原有的属性和功能,无论这些方法是否被重写。(3)可以将对象的上转型对象再强制转换到一个子类对象,强制转换过的对象具有子类所有属性和功能。(4)上转型对象调用方法时,就是调用子类继承和重写过的方法。而不会是新增的方法,也不是父类原有的方法。
System.out.println("苹果的重量"+f[0].getWeight());
System.out.println("梨的重量"+f[1].getWeight());
System.out.println("桃的重量"+f[2].getWeight());
System.out.println("苹果的颜色"+a.getColor());
}
}
packagech01;
publicclassWeekWorkerextendsEmployee{
//实现抽象方法
@Override
publicdoubleearnings() {
//TODO自动生成的方法存根
return48*2000;
}
}
packagech01;
publicclassCompany {
return a;
}
}
package test;
public class Yuanzhu implements Shape{
//属性
double high;//圆柱的高
double round;//圆柱的半径
//构造方法
public Yuanzhu(double g,double r){
this.high=g;
System.out.println("f[2]类名"+f[2].getClass().getName());
//获得对象的类名
System.out.println("a的类名"+a.getClass());
System.out.println("p的类名"+p.getClass());
System.out.println("c的类名"+c.getClass());
elseif(i%3==2)
employee[i]=newYearWorker();
this.round=r;
}
//实现接口方法
public double size(){
double b;
b=3.14*high*Math.pow(round, 2);
return b;
}
}
package test;
packagetest;
publicclassTest {
publicstaticvoidmain(String[]args){
//抽象方法,获得重量
publicabstractdoublegetWeight();
}
packagetwo;
publicclassAppleextendsFruit{
//属性
doubleweight;//苹果的重量
Stringcolor;//苹果的颜色
publicApple(doubleweight, String color) {
//创建水果数组
Fruit f[]=newFruit[3];
f[0]=newApple(3.8,"red");
f[1]=newPear(2.4);
f[2]=newPeach(1.2);
//强制转换
Apple a=(Apple)f[0];
Pear p=(Pear)f[1];
Peach c=(Peach)f[2];
for(inti=0;i<this.employee.length;i++){
this.sal+=this.employee[i].earnings();
}
returnthis.sal;
}
}
packagech01;
publicclassTest {
publicstaticvoidmain(String[] args){
doubleweight;
publicPear(doubleweight) {
this.weight= weight;
}
//实现抽象方法
publicdoublegetWeight(){
Returnweight;
}
}
packagetwo;
publicclassPeachextendsFruit{
doubleweight;
解释:3的2次方
4、我的疑问:
(1)如何将数组中的内容全部输出
(2)如何在接口对象中输出类中的属性值:
需要进行强制转可以输出类中的属性
例:Shape s[]=new Shape();
S[0]=new Juxing();
Juxingk =(Juxing) s[0];
package test;
public interface Shape {
}
}
•2、定义一个抽象类-水果,其中包括getWeight()方法,编写程序分别创建苹果、桃子、橘子三个类,创建若干水果对象存放在一个水果类型的数组中,输出数组中所有水果的类型、重量。提示:利用对象的getClass().getName()方法可获取对象的所属类的名称。
packagetwo;
publicabstractclassFruit {
public class Yuan implements Shape{
//属性
double round;//圆的半径
//构造方法
public Yuan(double r ){
this.round=r;
}
//实现接口方法
public double size(){
double a;
a=Math.pow(round,4)/3;//在java中求函数的幂
Shapes[]=newShape[3];
s[0]=newJuxing(5,4,3);
s[1]=newYuan(3);
s[2]=newYuanzhu(3,4);
//强制转换
Juxingk=(Juxing)s[0];
Yuany=(Yuan)s[1];
Yuanzhuz=(Yuanzhu)s[2];
System.out.println("矩形的高"+k.height);
//TODO自动生成的方法存根
return200000;
}
}
packagech01;
publicclassMonthWorkerextendsEmployee{
//实现抽象方法
@Override
publicdoubleearnings() {
/Baidu NhomakorabeaTODO自动生成的方法存根
return12*8000;
packagech01;
publicabstractclassEmployee {
//抽象方法
publicabstractdoubleearnings();
}
packagech01;
publicclassYearWorkerextendsEmployee{
//实现抽象方法
@Override
publicdoubleearnings() {
//创建接口方法
public double size();
}
package test;
public class Juxing implements Shape {
//属性
double length;//矩形的长
double width;//矩形的宽
double height;//矩形的高
//创建构造方法
注意:
1、实现接口方法一定要与接口方法相同,
在对它进行修改,即重写(保证返回值类型、方法名、方法的基本类型相同,否则会出现错误:未添加接口方法或定义类为抽象)
2、创建接口方法时,不存在方法体的,即后面大括号的部分
3、Java中求函数的幂:Math.pow(x,y);
例如:Math.pow(3,2);
this.weight= weight;
this.color= color;
}
publicString getColor() {
returncolor;
}
//实现抽象方法
publicdoublegetWeight(){
Returnweight;
}
}
packagetwo;
publicclassPearextendsFruit{
相关文档
最新文档