Java 面向对象三大特性之三——接口(面试、学习、工作必备技能)

news2025/1/16 3:39:35

目录

一、接口概述(interface)

二、接口的成员

三、继承和实现

四、单继承和多实现

五、接口的优点

六、接口与抽象类

七、接口的思想

八、接口案例——运动员

​​​​​​​

接口概述(interface)

定义:是抽象方法和常量值的集合。

本质:从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现

格式:interface 接口名{}

接口的出现将“多继承”通过另一种形式体现出来,即“多实现”。(implements)

接口的定义:

package com.demo01;

public interface Interface1 {
	public static final float PI = 3.14f;
	
	public abstract void method();
}

看一个小例子:用接口实现多继承,多实现

package com.demo01;
/*
 * Java语言的继承是单一继承,一个子类只能有一个父类(一个儿子只能有一个亲爹)
 * Java语言给我们提供了一种机制,用于处理继承单一的局限性的,接口
 * 
 * 接口:接口是一个比抽象类还抽象的类,接口里所有的方法全是抽象方法,接口和类的关系是实现,implements
 * interface
 * 
 * 格式:
 * 		interface 接口名 {
 * 
 * 		}
 * 
 */
public class InterfaceDemo {
	public static void main(String[] args) {
		BillGates gates = new BillGates();
		gates.code();
		gates.manage();
	}
}


//父类 定义接口
interface Boss {
	public void manage() ;
}

//父类 定义接口
interface Programmer {
	public void code() ;
}

//比尔盖茨
class BillGates implements Boss,Programmer {

	@Override
	public void code() {
		System.out.println("敲代码");
		// TODO Auto-generated method stub
		
	}

	@Override
	public void manage() {
		System.out.println("管理公司");
		// TODO Auto-generated method stub
		
	}
	
}

接口的成员

  • 接口中的成员修饰符是固定的

        –成员常量:public static final

        接口里面定义变量是全局常量,而且上面三个关键字都可以省略,而且只能是 public static final

        –成员函数:public abstract

        接口里面定义的方法都是抽象的,而且上面的两个关键字也是可以省略的

        –接口中的成员都是public的

看一个小例子,来理解上诉内容:

package com.demo01;
/*
 * 接口的成员特点:
 * 		只能有抽象方法
 * 		只能有常量
 * 		默认使用public&abstract修饰方法
 * 		只能使用public&abstract修饰方法
 * 		默认使用public static final来修饰成员变量
 * 
 * 建议:建议大家手动的给上默认修饰符
 * 
 * 注意:
 * 		接口不能创建对象(不能实例化)
 * 		类与接口的关系是实现关系,一个类实现一个接口必须实现它所有的方法

 */
public class InterfaceDemo2 {
	public static void main(String[] args) {
		// new 实际类的对象
		Animal a = new Cat();
		int n = Animal.num;
		a.eat();
		System.out.println(n);
	}
}


// 父类
interface Animal {
	public static final int num = 10;
	
	public abstract void eat();
}

// 子类

class Cat implements Animal {

	public void eat() {
		System.out.println("好好吃饭");
		
	}
	
}

继承和实现

  • 类与类之间称为继承:因为该类无论是抽象的还是非抽象的,它的内部都可以定义非抽象方法,这个方法可以直接被子类使用,所以子类继承就可以应用了
  • 类与接口是实现关系:因为接口中的方法都是抽象的,必须由子类实现才可以实例化,所以就用了这个关键字implements
  • 接口与接口之间是继承关系:一个接口可以继承另一个接口,并添加新的属性和抽象方法,并且接口可以多继承
  • 根据上面的接口的这些特点,我有一个经典例子,就是女明星认干爹

单继承和多实现

  • 类只能单继承,而接口可以多实现
  • java将多继承机制进行改良,通过多实现接口的形式来体现
  • 为什么不支持多继承呢?
  • 因为你继承的多个父类中定义了相同的方法,而方法内容不同,jvm无法判断选择哪个个父类的方法,有安全隐患
  • 而多实现就没有这个问题,即使是多个接口中都有相同的方法,但是他们都没有方法体
  • 多实现的好处,一个类继承另一个类的同时可以实现多个接口,一个女星只能有一个亲爹,但是干爹就可以有很多了.多实现的好处是扩展了功能
  • 接口的出现打破了单继承的局限性

接口的优点

  • 接口是对外暴露的规则
  • 类与接口的关系是实现
  • 接口的出现降低耦合性。(实现了模块化开发,定义好规则,每个人实现自己的模块,大大提高了开发效率)。

接口与抽象类

  • 共  性:都是不断抽取出来的抽象的概念
  • 区别 1:

        –与类的关系

  • 区别 2:

        –成员变量——接口里边的成员变量必须是常量,可以是变量,而抽象类中即可以有常量也可以有变量,因为接口中,他是靠别人来实现的,要变量没有意义。抽象类里边可以有具体的实现。

        –成员方法——接口里边必须是抽象的方法,不能有具体的实现,抽象类中既可以有抽象的方法,也可以有具体的实现方法。

        –构造方法——接口里边没有构造方法,因为他是没法new,没有自己的对象,抽象类里边有构造方法的,因为他是可以直接调用实现的。

看以下例子,来理解继承关系

package com.demo01;

import java.util.List;

/*
 * 
 * 类与类:继承关系,单一继承,多层继承
 * 类与接口:实现关系,多实现
 * 接口与接口的关系:继承关系,多继承
 */
public class InterfaceDemo3 {
	public static void main(String[] args) {
		List list;
	}
}

//接口继承了B接口
interface InterA extends InterB {
	public abstract void method();
}

// B接口
interface InterB {
	public abstract void function();
}
// 多层继承 
interface InterC extends InterA {
	
}

class Demo implements InterC,InterB,InterA {

	@Override
	public void method() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void function() {
		// TODO Auto-generated method stub
		
	}
	
}

接口思想

(1) Collection和List是父子关系,在API中自己索引查看。

接口案例——运动员

需求及分析:

第一、构造人的类

package com.demo02;

public class Person {
	String name;//姓名
	int age;//年龄
	String gender;//性别
	
	//无参构造
	public Person() {}
	
	//有参构造
	public Person(String name,int age,String gender) {
		this.name = name;
		this.age = age;
		this.gender = gender;
	}
	
	//吃
	public void eat() {
		System.out.println("吃饭");
	}
	
	//睡
	public void sleep() {
		System.out.println("睡觉");
	}
}

第二、抽象类——运动员

package com.demo02;

/**
 * 运动员
 */
public abstract class Player extends Person {
	//学习
	public abstract void study();
}

第三、抽象类——教练

package com.demo02;
/**
 * 教练
 */
public abstract class Coach extends Person {
	//教
	public abstract void teach();
}

第四、创建一个接口,接口中的方法是学习英语。

package com.demo02;

/**
 * 学习说英语
 */
public interface SpeakEnglish {
	public abstract void speak();
}

 第五、乒乓球运行员——继承并且学习抽球

package com.demo02;
/**
 * 乒乓球运动员
 */
public class PingpangPlayer extends Player {

	@Override
	public void study() {
		System.out.println("学抽球");
	}
	
}

第六、篮球运动员——继承运动员,实现学英语的接口

package com.demo02;
/**
 * 乒乓球运动员
 */
public class PingpangPlayer extends Player {

	@Override
	public void study() {
		System.out.println("学抽球");
	}
	
}

第七、篮球教练——继承抽象类教练,并且实现方法,学英语

package com.demo02;
/**
 * 篮球教练
 */
public class BasketBallCoach extends Coach implements SpeakEnglish {

	@Override
	public void teach() {
		System.out.println("教扣篮");
	}

	@Override
	public void speak() {
		System.out.println("说英语");
	}
	
}

第八、乒乓球教练——实现一个方法

package com.demo02;
/**
 * 乒乓球教练
 */
class PingpangCoach extends Coach {

	@Override
	public void teach() {
		System.out.println("教抽球");
	}
	
}

写一个测试类来调用

package com.demo02;
/* 	
 * 	篮球运动员和教练
	乒乓球运动员和教练
	现在篮球运动员和教练要出国访问,需要学习英语
	请根据你所学的知识,分析出来哪些是类,哪些是抽象类,哪些是接口
 */
public class InterfaceTest {
	public static void main(String[] args) {
		//创建篮球运动员对象
		BasketBallPlayer bbp = new BasketBallPlayer();
		bbp.name = "胡大海";
		bbp.age = 35;
		bbp.gender = "男";
		bbp.sleep();
		bbp.study();
		bbp.speak();
		System.out.println("-------------");
		//创建乒乓球教练对象
		PingpangCoach ppc = new PingpangCoach();
		ppc.name = "刘胖子";
		ppc.age = 40;
		ppc.gender = "男";
		ppc.sleep();
		ppc.teach();
		//ppc.speak();
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/220402.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++修行之路】类和对象

面向对象编程详解目录前言面向对象和面向过程类和结构体构造函数和析构函数拷贝构造和赋值重载结语前言 好久不见,首先祝大家元宵节快乐,万家元夕宴,一路太平歌,今天执此佳节,一起来学习一下类和对象吧~ 面向对象和面…

系列分享 |《最强的 VLC 多媒体开发教程》

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 专栏介绍 《VLC 多媒体开发》,是一个专注于 libVLC 开发的专栏,里面共包含几十个章节,从 0 到 1,图文并茂,详细地…

【Linux】冯诺依曼体系与操作系统(OS)概念

文章目录冯诺依曼体系结构为什么是这样的结构局部性原理操作系统(Operator System)设计OS的目的定位如何理解管理 (精髓:先描述再组织)总结系统调用和库函数概念冯诺依曼体系结构 我们常见的计算机,如笔记本.我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系 为什么是这…

C++深入浅出(八)—— 继承

文章目录1. 继承的概念及定义🍑 继承的概念🍑 继承的定义🍅 定义格式🍅 继承关系和访问限定符🍅 继承基类成员访问方式的变化2. 基类和派生类对象赋值转换3. 继承中的作用域4. 派生类的默认成员函数5. 继承与友元6. 继…

jsp 校园网系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 校园网系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统采用web模式开发,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数…

C#,入门教程(39)——C#语言的概念与知识点摘要

本文归纳整理C#的一些知识点,便于快速浏览与掌握C#语言的一些基本概念。本文并没有很好地层次与组织,抄了不少,写了不少,想到什么,就写什么。01 类 class类是C#等面向对象编程语言(Object-oriented program…

常用API、Lambda、常见算法

目录 日期与时间 Date SimpleDateFormat Calendar JDK8新增日期类 概述、LocalTime/LocalDate/LocalDateTime Instant DateTimeFormatter Duration/Period ChronoUnit 包装类 包装类练习 正则表达式 正则表达式概述、初体验 正则表达式的匹配规则 正则表达式的…

Zookeeper注册中心

zookeeper的使用场景 分布式协调、分布式锁、元数据/配置信息管理、HA高可用性 分布式协调 A系统发送个请求到mq,然后B系统消息消费之后处理了,那A系统如何知道B系统的处理结果?A系统发送请求之后在zookeeper上对某个节点的值注册个监听器,一旦B系统处理完了就修改zooke…

C语言高级教程-C语言数组(七):数组综合实例之井字棋游戏问题

C语言高级教程-C语言数组(七):数组综合实例之井字棋游戏问题一、本文的编译环境二、井字棋游戏的问题三、井字棋游戏的分析四、井字棋游戏的程序编写步骤4.1、添加主要的游戏循环和显示这个方格4.2、让玩家选择-一个方格, 并确定那…

Android 设置可抓包

在ren目录下新建xml文件夹&#xff0c;在xml下新建network_security_config.xml<?xml version"1.0" encoding"utf-8"?><!--<network-security-config>--><!-- <base-config cleartextTrafficPermitted"true" />--&…

MySQL面试:MySQL事务,内附详细视频教程,以及sql事务演示

文章目录一、事务&#xff08;提出事务&#xff09;二、四个特性&#xff08;事务要实现的特性&#xff09;三、一致性问题&#xff08;事务可以解决这些问题&#xff09;四、解决&#xff08;事务解决部分或全部一致性问题&#xff09;五、实现&#xff08;事务实现ACID的机制…

Python setattr()、getattr()、hasattr()函数用法详解

Python hasattr()函数hasattr() 函数用来判断某个类实例对象是否包含指定名称的属性或方法。该函数的语法格式如下&#xff1a;hasattr(obj, name)其中 obj 指的是某个类的实例对象&#xff0c;name 表示指定的属性名或方法名。同时&#xff0c;该函数会将判断的结果&#xff0…

差值结构不对称部分的约化质心

( A, B )---5*30*2---( 1, 0 )( 0, 1 ) 做一个网络&#xff0c;输入为5个点&#xff0c;训练集A,B各有两张图片。让B的两张图片全是0.排列组合A&#xff0c;记录迭代次数平均值的变化。 迭代了1024组&#xff0c;共收集到33组不同的数据&#xff0c;其中对称的部分有17组&…

Java volatile学习

面试题&#xff1a; 1、请谈谈你对volatile的理解&#xff1f; volatile是Java虚拟机提供的轻量级的同步机制1.保证可见性2.不保证原子性3.禁止指令重排 2、JMM你谈谈?3、你在哪些地方用到过volatile?一、概述 JMM(Java内存模型 Java Memory Model&#xff0c;简称JMM) 本身是…

JSP 概述(三)

JSP 的处理过程&JSP 与其他服务器端脚本语言的比较1. JSP 的处理过程2. JSP 与其他服务器端脚本语言的比较2.1 CGI2.2 ASP2.3 PHP2.4 ASP.NET结束语1. JSP 的处理过程 当客户端浏览器向服务器发出请求要访问一个 JSP 页面时&#xff0c;服务器根据该请求加载相应的 JSP 页…

微信小程序里面的js文件分为哪几类?

1.小程序中的.js的分类 小程序中的JS文件分为三大类&#xff0c;分别是&#xff1a; 1.app.js 是整个小程序项目的入口文件&#xff0c;通过调用App()函数来启动整个小程序 2.页面的.js文件 是页面的入口文件&#xff0c;通过调用 Page&#xff08;&#xff09;函数来创建并运行…

Java基础语法(基础篇 适合小白)

Hello World public 访问修饰符 static 关键字 void 返回类型 String 类 args字符串数组 public class HelloWorld {/* 第一个Java程序* 它将输出字符串 Hello World*/public static void main(String[] args) {System.out.println("Hello World"); // 输出 Hello Wo…

Odoo | 7个步骤搭建的“在线表格组件”,十分丝滑~

X-SpreadSheet是一个类似于google sheet的在线表格组件&#xff0c;很多场景都能借助它来搭建在线表格。 集成过程 1、下载X-SpreadSheet源码到本地 下载地址 x-spreadsheet.css&#xff1a; https://unpkg.com/x-data-spreadsheet1.0.13/dist/xspreadsheet.css x-spread…

Tomcat的安装及配置

Tomcat介绍&#xff1a;Tomcat简单地说就是一个运行JAVA的网络服务器&#xff0c;底层是Socket的一个程序&#xff0c;它也是JSP和Serlvet的一个容器疑问&#xff1a;一个电脑中可以安装多个版本的Tomcat吗&#xff1f;同一台电脑可以同时安装多个Tomcat服务器。安装及配置&…

【Spark分布式内存计算框架——Spark 基础环境】2. 快速入门(上)环境准备

第三章 快速入门 目前Spark最新稳定版本&#xff1a;2.4.x系列&#xff0c;官方推荐使用的版本&#xff0c;也是目前企业中使用较多版本&#xff0c;网址&#xff1a;https://github.com/apache/spark/releases Spark 2.4.x依赖其他语言版本如下&#xff0c;其中既支持Scala …