Java多态性应用:接口interface、抽象类abstract、继承extends、实现接口implements

 

一、接口知识点回顾

1、接口表示方法

  • 和类class一样的使用方法

2、接口里面的内容

  • 成员变量都是static常量且要赋初值。
  • 成员方法都是抽象abstract方法,只声明、不具体实现。

3、创建对象

  • 只能使用接口回调

二、抽象类知识点回顾

1、抽象类的表示方法

  • 关键词abstract,用来修饰类class的

2、抽象类里面的内容

  • 只有成员方法,且都是abstract修饰的,只声明、不具体实现。

3、创建对象

  • 只能使用上转型对象

三、案例实战

1、实验内容

  1. 定义一个G2D接口,存放在包com.xhu.interf中。接口中定义π的值为3.14159,再定义一个求Shape面积的方法getArea()。
  2. 定义一个抽象类Shape,存放在包com.xhu.abstracts中。公有抽象方法getPerimeter()求周长。
  3. 编写一个圆类Circle,存放于包com.xhu.test中,它继承抽象类Shape,实现接口G2D,在Circle中定义私有属性半径及实现求圆的周长和面积方法。然后在圆类中编写一个主方法,计算半径为10的圆的周长和面积。
  4. 编写接口G2D的子接口G3D,存放在包com.xhu.interf中,在G3D中增加计算体积的方法getVolume()。
  5. 编写一个圆柱体类Cylinder,它继承了Shape类并实现G3D接口,重写了抽象类中的方法和接口中的方法。然后再编写一个主方法,能计算半径为10,高为15的圆柱体的表面积和体积。

注:圆柱体表面积:2πrr+h)    圆柱体体积:πr²h

2、实验代码

package Exam;
/**
 *接口里面的只有static常量、abstract抽象方法
 */
public interface G2D {
    public static double π=3.14159;
    public abstract void getArea();    
}
package Exam;
/**
 *抽象类里面都是抽象方法:只是声明
 */
public abstract class Shape {
    public abstract void getPerimeter();
}
package Exam;
/**
 *一个类同时继承和实现接口
 */
public class Circle extends Shape implements G2D {

    private double r;

    public void setR(double r) {
        this.r = r;
    }
    @Override//实现抽象类的抽象方法
    public void getPerimeter() {
        double perimeter;
        perimeter = π * r * 2;
        System.out.print("周长:" + perimeter);
    }
    @Override//实现接口的抽象方法
    public void getArea() {
        double area;
        area = π * Math.pow(r, 2);
        System.out.print("面积:" + area);
    }
}
//圆形Circle测试类
package SyTest;
import Exam.Circle;
public class CircleTest {
    public static void main(String[] args){
        Circle c=new Circle();
        c.setR(10);
        c.getPerimeter();
        System.out.println("");
        c.getArea();
    }
}

 

package Exam;
/**
 * 通过关键字extends声明一个接口是另一个接口的子接口。
 * 子接口将继承父接口中的全部方法和常量。
 */
public interface G3D extends G2D{
    public abstract void getVolume();
}
package Exam;
/**
 *一个类同时实现继承类和实现接口
 */
public class Cylinder extends Shape implements G3D {
    private double r;
    private double h;
    public void setR(double r) {
        this.r = r;
    }
    public void setH(double h) {
        this.h = h;
    }
    @Override//底圆周长=2πr
    public void getPerimeter() {
        double perimeter ;
        perimeter= 2 * π * r;
        System.out.print("底圆周长:" + perimeter);
    }
    @Override//体积=表面积*高=πr²h
    public void getVolume() {
        double volume ;
        volume= π * r * r * h;
        System.out.print("体积:" + volume);
    }
    @Override//表面积=2πr(r+h) 
    public void getArea() {
        double area ;
        area= 2 * π * r * (r + h);
        System.out.print("表面积:" + area);
    }
}
package SyTest1;
import Exam.Cylinder;
//测试类CylinderTest
public class CylinderTest {
    public static void main(String[] args) {
        Cylinder cy=new Cylinder();
        cy.setH(15);
        cy.setR(10);
        cy.getArea();
        System.out.println("");
        cy.getVolume();
    }
}

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值