首页 > 编程语言 >Java接口应用代码示例

Java接口应用代码示例

时间:2024-03-28 20:33:14浏览次数:28  
标签:Java name 示例 age System 接口 println public out

1.概念

在Java中接口是一个抽象的数据类型,在接口里面我们会定义类应该遵循的行为规范,并不会去具体实现,只是告诉了接了该接口的类一定要实现些什么方法。接口中可以有常量、方法 和 嵌套类型的声明(就是在该接口内部定义其他类型,如接口、类、枚举)。

一个接口可以被多个类去实现,一个类也可以去实现多个接口(以 implements  1, 2 , 3, ..... 的形式)。

2.代码示例

  我们还是以动物类(Animal)为例举例。

  我们首先定义一个动物类(Animal):

class Animal{
    private String name;  //名字
    private int age;   //年龄

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

其中包含了两个私有变量 名字(name) 和 年龄(age),还有五个公共的方法,getName() 返回动物名字、getAge()返回动物年龄、setName() 修改动物名字、setAge() 修改动物年龄、和 构造方法 Animal( String name, int age)。

然后我们定义一个 IAbility 接口:

interface IAbility{
    void showInfo();  //输出动物信息
    void cry();    //动物发出叫声
}

可以看到我们在接口中只是给出了两个方法的行为规范,并没有具体实现。

我们定义两个 Animal 的 子类,分别是 小狗(Dog) 、 小猫(Cat)。

class Dog extends Animal implements IAbility {
    public Dog( String name, int age) {
        super( name, age);
    }

    @Override
    public void showInfo() {
        System.out.println("我是一只狗,我的名字是" + getName() + ",今年" + getAge() + "岁");
    }

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

class Cat extends Animal implements IAbility {

    public Cat( String name, int age) {
        super( name, age);
    }

    @Override
    public void showInfo() {
        System.out.println("我是一只猫,我的名字是" + getName() + ",今年" + getAge() + "岁");
    }

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

在这两个子类中我们都实现了 IAbility 接口,可以看到在两个子类中我们都实现 接口 IAbility 中的方法, 只是根据它们自身的需求,实现的的内容有些不同。

我们定义一个模拟器类(Simulator):

class Simulator {
    public void playSound(IAbility animal) {
        animal.showInfo();
        animal.cry();
        try {
            Cat a = (Cat)animal;
            System.out.println(a.getName());
            System.out.println(a.getAge());
        }
        catch (Exception e) {
            Dog a = (Dog) animal;
            System.out.println(a.getName());
            System.out.println(a.getAge());
        }
    }
}

在这个模拟器类中,我们通过 playSound( IAbility animal) 方法去调用接口中的 showInfo() 和 cry() 方法。注意在 playSound( IAbility animal) 方法中,形式参数为一个接口类,这个时候我们又想要单独输出动物的名字和年龄怎么办呢?

我们需要使用强制类型转换,而这时候我们有两个子类 Cat 和 Dog, 那到底是哪一个呢,所以我们使用 java异常处理,try-catch块去处理,在 try中 当我们强制类型转换错了后,会抛出一个错误信息,让 catch 接收到并进行下一步处理。

当然除了用 java异常处理,我们还可以使用 instanceof 运算符去判断。

在Java中 instanceof 用于检查一个对象是否是一个类的实例或者是该类的子类的实例

我们可以将 上面代码中的 try-catch 块 改成这样:

if(animal instanceof Dog a) {
            System.out.println(a.getName());
            System.out.println(a.getAge());
        } else if (animal instanceof Cat a) {
            System.out.println(a.getName());
            System.out.println(a.getAge());
        }

3.代码综合

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        IAbility animal=null;
        
        // 输入 1 为小狗, 输入 2 为小猫
        int type=input.nextInt();
        String name=input.next();
        int age=input.nextInt();
        if (type==1)
            animal=new Dog(name,age);
        else
            animal=new Cat(name,age);

        Simulator sim=new Simulator();
        sim.playSound(animal);
        input.close();
    }
}

 class Animal{
    private String name;  //名字
    private int age;   //年龄

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

interface IAbility{
    void showInfo();  //输出动物信息
    void cry();    //动物发出叫声
}

class Dog extends Animal implements IAbility {
    public Dog( String name, int age) {
        super( name, age);
    }

    @Override
    public void showInfo() {
        System.out.println("我是一只狗,我的名字是" + getName() + ",今年" + getAge() + "岁");
    }

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

class Cat extends Animal implements IAbility {

    public Cat( String name, int age) {
        super( name, age);
    }

    @Override
    public void showInfo() {
        System.out.println("我是一只猫,我的名字是" + getName() + ",今年" + getAge() + "岁");
    }

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

class Simulator {
    
    // 输出动物自我介绍和叫声,并且单独输出动物的名字和年龄
    public void playSound(IAbility animal) {
        animal.showInfo();
        animal.cry();
        try {
            Cat a = (Cat)animal;
            System.out.println(a.getName());
            System.out.println(a.getAge());
        }
        catch (Exception e) {
            Dog a = (Dog)animal;
            System.out.println(a.getName());
            System.out.println(a.getAge());
        }
    }
}

标签:Java,name,示例,age,System,接口,println,public,out
From: https://blog.csdn.net/2301_80284166/article/details/137122502

相关文章

  • java计算机毕业设计(附源码)学生日常行为评分系统(ssm+mysql+maven+LW文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在教育过程中,学生的行为举止不仅反映了个人素养,也是学校文化和教育质量的直接体现。传统的德育评价体系多依赖于教师的主观观察和判断,这种方式往往存在一......
  • java计算机毕业设计(附源码)学生社团管理系统(ssm+mysql+maven+LW文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着教育多元化的推进,学生社团作为校园文化的重要组成部分,在培养学生兴趣爱好、提升实践能力、促进人际交往等方面发挥着不可替代的作用。然而,伴随着社团......
  • JAVA8-Lambda表达式
    Lambda表达式是Java8中引入的一项特性,它提供了一种简洁的方法来表示只有一个方法的接口(即函数式接口)的实例。Lambda表达式通常用于创建匿名方法。这种表达式是函数式编程的核心,允许开发者写出更简洁、更灵活的代码。Lambda表达式的结构Lambda表达式的一般形式是(参数列......
  • 包机制、JavaDoc
    包机制*代表导入这个包下所有的类!JavaDocJava的api帮助文档:https://docs.oracle.com/javase/8/docs/api/index.html/***@authorxqstudy*@version1.0*@since3.28*/publicclassDoc{Stringname;/****@paramname*@retur......
  • java-String类
    1,字符串构造分为三种方法:Strings1="helloworld";Strings2=newString("helloworld");char[]array={'h','e','l','l','o'};Strings3=newString(array)String为引用类型,存储的并不是字符本身。Strings1=......
  • java毕业设计基于微信小程序的电影售票系统[附源码]
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义随着移动互联网的快速发展,微信小程序作为一种新型的应用形式,以其无需下载安装、使用方便的特点,受到了广大用户的青睐。电影作为一种重要的娱乐方式,已经成为了人们......
  • 当 go 与 Java 相碰时,有什么不同?
    Go与Java全面对比及实际应用学习指南第一部分基础内容分析引言在快速发展的软件行业中,编程语言的选择对于项目的成功至关重要。Go与Java是目前两个非常流行的编程语言,本文将深入剖析这两种语言的特点,并对它们进行全面的比较。历史与哲学Go语言由Google在2009年推出,目......
  • 重生前端之我在javascript敲代码(03-数组)
    一.数组(重点)思考:如何保存一个班级的所有学生的姓名?回答:一种方法利用前面学习过的知识,则每一条信息都需要一个变量去保存,缺点是这样做很麻烦,而且容易出错,又不合理;另一种方法就是利用数组。概念:数组是存储一系列值的变量集合,可以存储多个值。1.1语法数组构成:数组由一个或......
  • JavaScript数据类型
    JS数据类型整体分为两大部分:基本数据类型引用数据类型基本数据类型    Number数字型    数学中学习到的数字,可以是整数,小数,正数,负数。    JavaScript中的正数,负数,小数等统一称为数字类型。 注意事项    JS是弱数据类型,变量到底......
  • 基于JAVA SSM 实现【房屋租赁系统】(内附设计文档 + PPT+ 源码 下载)
    房屋租赁系统项目技术栈该项目采用了以下核心技术栈:后端框架/库:Java,ssm数据库:MySQL5.7前端技术:HTML,CSS,JavaScript服务器:Tomcat7开发工具:Eclipse/MyEclipse/IDEA,NavicatforMySQL项目展示5.1前台首页功能模块图5-1前台首页界面图首页展示了房源信息......