Java中接口的理解和使用

399 篇文章 12 订阅

1、接口的理解

package com.example.demo.interfaceClass;


/**
 * 1、我们前面用继承关系,描述了动物、哺乳动物、爬行动物的各种关系
 * 2、现在我们要描述:飞机、公鸡、导弹、子弹、篮球、石头的关系?
 */

//进行一次抽象,它们都会飞
public interface Flyable {
    int MAX_SPEED = 11000;
    int MIN_HEIGHT = 1;
    void fly();
}

//进行第二次抽象,导弹、子弹、石头可以攻击
interface Attack {
    void attack();
}

/**
 * 这就是接口的意义:进行了更加抽象的定义
 */
class Plane implements Flyable {
    @Override
    public void fly() {
        System.out.println("飞机靠发动机起飞!");
    }
}

class Man implements Flyable {
    @Override
    public void fly() {
        System.out.println("跳起来,飞!");
    }
}

/**
 * 石头既要遵守Flyable的规范,也要遵守Attack的规范。
 * 或者说石头既有Flyable的特性,也有Attack的特性。
 *
 * 类可以实现多个接口(注意不是继承)。
 * 继承还不够抽象,必须依赖接口。
 */
class Stone implements Flyable, Attack {
    int weight = 100;

    @Override
    public void fly() {
        System.out.println("被人扔出去,飞!");
    }

    @Override
    public void attack() {
        System.out.println("石头扔出去攻击!");
    }
}

测试类:

package com.example.demo.interfaceClass;

/**
 * @Description 接口测试类
 * @Auther gf.x
 * @Date 2020/4/13 2:36
 */
public class Test {
    public static void main(String[] args) {
        Flyable f = new Stone(); //多态 父类引用指向子类对象
        //f.weight //这里通过f获取不到Stone类的weight的属性
        //如果非要获得Stone类的weight的属性的话,可以把f强转回Stone类型
    }
}

2、接口的使用

接口:

package com.example.demo.interfaceClass;

public interface MyInterface {

    //接口中只有:常量、抽象方法

    //public static final 接口中定义常量时,写或不写默认都会加上
    String MAX_GREAD = "boss";
    int MAX_SPEED = 120;

    //方法修饰符只支持public、abstract,这里不管加不加public abstract,默认都会加的
    //不支持private修饰符
    public void test();
    public int test1(int a, int b);
}

实现类:

package com.example.demo.interfaceClass;

/**
 * @Description 接口的理解和使用
 * @Auther gf.x
 * @Date 2020/4/13 1:24
 */
public class MyClass implements MyInterface {

    @Override
    public void test() {
        //MyInterface.MAX_GREAD;
        System.out.println("test!");
    }

    @Override
    public int test1(int a, int b) {
        System.out.println("test1!");
        return a + b;
    }
}

3、接口的多继承

package com.example.demo.interfaceClass;

/**
 * 接口的多继承
 */
public interface InterfaceA {
    void aaa();
}

interface InterfaceB {
    void bbb();
}

//接口多继承
interface InterfaceC extends InterfaceA, InterfaceB {
    void ccc();
}

class TestClass implements InterfaceC {

    @Override
    public void aaa() {
        System.out.println("aaa!");
    }

    @Override
    public void bbb() {
        System.out.println("bbb");
    }

    @Override
    public void ccc() {
        System.out.println("ccc");
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
本文是一个word讲义 介绍了 Figure circle Rectangle等类在接口计抽象类的用法 抽象类 接口多态 public class Polymorphism { public static void main(String args[]) { Triangle t=new Triangle(5.0,2.0); t.show_area(); Rectangle r=new Rectangle(3.0,4.0); r.show_area(); Circle c=new Circle(10.0); c.show_area(); } } abstract class Figure { protected double x=10.0,y=5.0; abstract void show_area(); } class Triangle extends Figure { Triangle(double a,double b) { x=a; y=b; } void show_area() { System.out.println("triangle:"+(0.5*x*y)); } } class Rectangle extends Figure { Rectangle(double a,double b) { x=a; y=b; } void show_area() { System.out.println("rectangle:"+(x*y)); } } class Circle extends Figure { Circle(double a){x=a;} final double pi=3.1416; void show_area() { System.out.println("circle:"+(pi*x*x)); } } package inf; interface Figure { abstract double area(); } //Rectangle.java package inf; /** * * @author tai */ public class Rectangle implements Figure{ double width,height; public Rectangle(double w,double h) //构造方法 { width=w; height=h; } public double area(){ return (width * height); } } //Triangle.Java package inf; /** * * @author tai */ class Triangle implements Figure { double a; double b; double c; Triangle(double a,double b,double c) { this.a=a; this.b=b; this.c=c; } public double area() { double p=(a+b+c)/2; return Math.sqrt(p*(p-a)*(p-b)*(p-c)); } } //Circle.java package inf; /** * * @author tai */ class Circle implements Figure { double radius; Circle(double radius) { this.radius=radius; } public double area() { return Math.PI*radius*radius; } } 测试一: public class Test4 { public static void main(String args[]) { Triangle t=new Triangle(5.0,6.0,7.0); System.out.println("三角形面积="+t.area()); Rectangle r=new Rectangle(3.0,4.0); System.out.println("矩形面积="+r.area()); Circle c=new Circle(10.0); System.out.println("圆的面积="+c.area()); } } 测试二: package inf; import javax.swing.JOptionPane; public class Test5 { public static double totalArea1(Figure f[]) { double totalArea=0; for(Figure f1:f){ totalArea+=f1.area(); } return totalArea; } public static void main(String args[]) { Figure f[] =new Figure[3];//为什么 f[0]=new Triangle(5.0,6.0,7.0); f[1]=new Rectangle(6.0,87.0); String input=JOptionPane.showInputDialog("输入圆的半径"); Double r=Double.parseDouble(input); f[2]=new Circle(r); double totalArea=0; for(Figure f1:f){ totalArea+=f1.area(); } JOptionPane.showMessageDialog(null,"totalarea="+totalArea); JOptionPane.showMessageDialog(null,"totalarea1="+totalArea1(f)); } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值