首页 > 编程语言 >Java笔记—Java接口

Java笔记—Java接口

时间:2023-11-10 20:32:44浏览次数:50  
标签:Java name age 笔记 void 接口 public String

Interface接口简介

接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法

接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。


接口与类的区别:

  • 接口不能用于实例化对象。
  • 接口没有构造方法
  • 接口中所有的方法必须是抽象方法,Java 8 之后 接口中可以使用 default 关键字修饰的非抽象方法。
  • 接口不能包含成员变量,除了 static 和 final 变量。
  • 接口不是被类继承了,而是要被类实现。
  • 接口支持多继承。

Animal类:

package com.test.interfa;

// 抽象方法需要 abstract 抽象类
public abstract class Animal {
    private String name;
    private int age;

    public Animal() {
    }

    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;
    }

    // 吃的方法不一样,使用abstract 抽象方法
    public abstract void eat();
}

Swim接口interface:

package com.test.interfa;

public interface Swim {
    public abstract void swim();
}

Frog青蛙类:

package com.test.interfa;

public class Frog extends Animal implements Swim{

    public Frog() {
    }

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

    @Override
    public void eat() {
        System.out.println("小青蛙在吃蟲子!");
    }

    @Override
    public void swim() {
        System.out.println("小青蛙在游泳!");
    }
}

Rabbit兔子类:

package com.test.interfa;

public class Rabbit extends Animal{

    public Rabbit() {
    }

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

    @Override
    public void eat() {
        System.out.println("小白兔吃萝卜!");
    }
}

Test类:

package com.test.interfa;

public class Test {
    public static void main(String[] args) {
        Frog f = new Frog("小青蛙",3);
        System.out.println(f.getName() + "," + f.getAge());
        f.eat();
        f.swim();

        Rabbit r = new Rabbit("小白兔",6);
        System.out.println(r.getName() +","+ r.getAge());
        r.eat();
    }
}

运行结果:

小青蛙,3
小青蛙在吃虫子!
小青蛙在游泳!

小白兔,6
小白兔吃萝卜!


接口特性

  • 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
  • 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
  • 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

Java笔记—Java接口_抽象类

抽象类和接口的区别

  • 1. 接口不能有方法体(默认方法使用 default 关键字),抽象类可以有(仅限java8以前)
  • 2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
  • 3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法(仅限java8以前)
  • 4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。


静态方法

从java8开始接口里可以有静态方式,但是接口里的静态方法的修饰符只能是public,且默认是public static

interface Test{
    static void test1(){//不写public也可,默认为public
        System.out.println("静态方法");
    }
}

class TestClass{
    public static void main(String[] args){
        Test.test1();//与调用普通类的静态方法一致
    }
}

非静态方法

java8里,除了可以在接口里写静态方法,还可以写非静态方法,但是必须用default修饰,且只能是public,默认也是public default,这方法称为默认方法。

interface Test{
		default void test1(){	//不写public也可,默认为public
				System.out.println("默认方法");
		}	//该方法需要实例化后调用,可使用匿名内部类进行实例化
}

接口有以下特性:

  • 接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
  • 接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。
  • 接口中的方法都是公有的。


在实现接口的时候,也要注意一些规则:

  • 当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。
  • 一个类可以同时实现多个接口。
  • 一个类只能继承一个类,但是能实现多个接口。
  • 一个接口能继承另一个接口,这和类之间的继承比较相似。


Java笔记—Java接口_System_02

Person类:

package com.test.interfa;

public class Person {
    private String name;
    private int age;

    public Person() {
    }

    public Person(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;
    }
}

Sporter运动员类:

package com.test.interfa;

public abstract class Sporter extends Person{
    public Sporter() {
    }

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

    // 乒乓球运动员和籃球远动员学习方法不一样,所以使用抽象方法
    public abstract void study();
}

Coach教练类:

package com.test.interfa;

public abstract class Coach extends Person{

    public Coach() {
    }

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

    public abstract void teach();
}

English接口:

package com.test.interfa;

public interface English {

    // 接口的成員必須是抽象方法
    public abstract void speakEnglish();
}

PingPangSporter乒乓球运动员:

package com.test.interfa;

public class PingPangSporter extends Sporter implements English{
    // 鼠標點擊紅色下劃線,ARTL + 回車 重寫父類方法

    public PingPangSporter() {
    }

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

    @Override
    public void study() {
        System.out.println("乒乓球运动员在学习打乒乓球!");
    }

    @Override
    public void speakEnglish() {
        System.out.println("乒乓球運動員在說英語!");
    }
}

BaskballSporter篮球运动员类:

package com.test.interfa;

public class BaskballSporter extends Sporter implements English{
    public BaskballSporter() {
    }

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

    @Override
    public void speakEnglish() {
        System.out.println("藍球運動員在說英語!");
    }

    @Override
    public void study() {
        System.out.println("藍球運動員在學習打籃球!");
    }
}

Test测试类:

package com.test.interfa;

public class Test {
    public static void main(String[] args) {
        PingPangSporter pps = new PingPangSporter("刘诗雯",23);
        System.out.println(pps.getName() +","+ pps.getAge());
        pps.study();
        pps.speakEnglish();
    }
}

运行结果:

刘诗雯,23

乒乓球运动员在学习打乒乓球!

乒乓球运动员在說英語!








标签:Java,name,age,笔记,void,接口,public,String
From: https://blog.51cto.com/u_15520037/8307680

相关文章

  • 接口测试用YAML写测试用例
    代码和用例分离时,测试用例用YAML或excel写都可以。一般接口测试用YAML写测试用例原因:1.方便的字典和YAML之间切换2.YAML有数据类型 数据组成:1.对象:通过字典表示 key:value2.数组:通过列表表示,通过一组对齐的-表示(YAML里面字符串一般不写引号)-name:获取接口统......
  • Set接口
     ......
  • Java登陆第三天——SQL之DQL
    SQL语句SQL概括起来可以分为以下四组。(都是SQL,因为功能的不同,为了更好学习划分了类别)DDL——数据定义语言。用于定义数据的结构。指的是增,删,改数据库DML——数据操作语言。用于检索或修改数据。指的是增,删,改数据DQL——数据查询语言。用于查询各种形式的数据。指的是查询......
  • Java中的接口
    注意:接口中的成员变量与成员方法默认权限都是public例子接口publicinterface_173Animal{//接口中的变量,默认是常量,并且自动加了static、final关键字publicstaticfinalintcode1=200;publicfinalintcode2=300;//相当于intcode3=300//在......
  • 20211325 2023-2024-1 《信息安全系统设计与实现(上)》第九周学习笔记
     202113252023-2024-1《信息安全系统设计与实现(上)》第九周学习笔记一、任务要求自学教材第6章,提交学习笔记(10分),评分标准如下1.知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X知......
  • 新发布的Java使用率均超Java8
    Java软件供应商Azul发布了首份年度Java现状调查报告,基于对全球2062名Java专业人士和基于Java的应用程序用户进行的调查。Java软件供应商Azul发布了首份年度Java现状调查报告,基于对全球2062名Java专业人士和基于Java的应用程序用户进行的调查。调查探......
  • 梦断代码 读书笔记 02
    工程师和艺术家软件开发者是工程师还是艺术家。这个问题,总结了软件开发过程中无数细节问题,这些问题统统没有答案。软件开发领域的圣战比宗教中的还要多。从项目管理到软件设计,只有模糊的建议,以经验性方法为主导,估算工期的方法叫“拍”:一拍脑袋有了,一拍胸口干了,一拍大腿坏了,一拍......
  • 学习笔记9
    第6章信号和信号处理摘要本章讲述了信号和信号处理,介绍了信号和中断的统一处理;将信号和思维进程中断,将进程从正常执行转移到信号处理;解释了信号来源信号和中断“中断”是从I/O设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移到中断处理。与发送给CPU的信号一样,信号......
  • Day05-Java开发所需的前端技术
    session原理(适用于单体的身份效验)Http无状态,有会话无状态是指,请求之间相互独立,第一次请求的数据,第二次请求不能重用有会话是指,客户端和服务端都有相应的技术,可以暂存数据,让数据在请求见共享服务端使用了session技术来暂存数据存GET/s1?name=zhangHTTP/1.1Host:localhost取GET......
  • 第六章学习笔记、知识完整性总结
    目录概述信号和中断Unix/Linux中的信号信号与异常处理与IPC实践概述本章介绍了信号、信号的产生、信号的内容和信号处理;介绍了信号和中断的统一管理,帮助建立对于信号的正确看待方式;信号在Unix/Linux是发挥怎样的作用,如何产生以及处理,PROC中的信号和信号作为进程通信(IPC)机......