Java中实现接口与继承的区别及说明

 更新时间:2024年03月25日 09:35:36   作者:feng之锋  
这篇文章主要介绍了Java中实现接口与继承的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Java实现接口与继承的区别

首先,先来了解一下什么是接口继承

接口一般是使用interface来定义的。

接口定义同类的定义类似,分为接口的声明接口体,其中接口体常量定义方法定义两部分组成。

定义接口的基本格式

如下:

[修饰符] interface 接口名 [extends 父接口名列表]{
[public] [static] [final] 常量;
[public] [abstract] 方法;
}
  • 修饰符:可选,用于指定接口的访问权限,可选值为public。如果省略则使用默认的访问权限。
  • 接口名:必选参数,用于指定接口的名称,接口名必须是合法的Java标识符。一般情况下,要求首字母大写。
  • extends 父接口名列表:可选参数,用于指定要定义的接口继承于哪个父接口。当使用extends关键字时,父接口名为必选参数。
  • 方法:接口中的方法只有定义而没有被实现。

例如,定义一个用于计算的接口,在该接口中定义了一个常量PI和两个方法

具体代码如下

public interface CalInterface 
{
    final float PI=3.14159f;//定义用于表示圆周率的常量PI
    float getArea(float r);//定义一个用于计算面积的方法getArea()
    float getCircumference(float r);//定义一个用于计算周长的方法getCircumference()
}

此时需要注意的是:

与Java的类文件一样的,接口文件的文件名必须与接口名相同。

继承:继承是Java面向对象编程技术的一块基石,因为它允许创建分等级层次的类,它是一种子类继承父类的特征和行为,使得子类对象(实例)具有父亲的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

生活的继承

兔子和羊属于食草动物类,狮子和豹属于食肉动物类。

食草动物和食肉动物又是属于动物类。

所以继承需要符合的关系是:is-a,父类更通用,子类更具体。

虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,所以子类除了会具有父类的一般特性也会具有自身的特性。

继承的特性

  • 子类拥有父类非private的属性、方法;
  • 子类可以拥有自己的属性和方法,即子类可以就自己的功能需求对父类进行扩展;
  • 子类可以用自己的方式实现父类的方法;
  • Java的继承是单继承,但是是可以多重继承的,单继承就是一个子类只能继承一个父类,多重继承就是,例如 A 类继承 B 类,B 类继承 C 类,所以按照关系就是 C 类是 B 类的父类,B 类是 A 类的父类,这是 Java 继承区别于 C++ 继承的一个特性;
  • 提高了类之间的耦合性,但是也会带来一些问题,如果耦合度高的话会造成代码之间越紧密,代码的独立性就越差。
  • 在Java中,接口的实现和继承的实现很类似的,写法上是几乎是一致的,就是关键字这一部分不一样,即实现接口使用的关键字为implements,而继承使用的关键字为extends。

代码如下:

实现接口的代码:

public class ButtonListener implements ActionListener {}

实现接口类型的写法与解释:

//事件处理类
//实现接口一定要实现(重写)接口中所有的抽象方法
//实现接口(继承):implements
//public class 子类 implements 接口,接口,,{}
//一个子类后面能够实现很多个接口的
//实现接口一定要实现(重写)接口中所有的抽象方法
//ActionListener只是一个接口,也可以换成其他的接口的,所以下面必须是public void actionPerformed(ActionEvent e)的,抽象方法需与接口保持一致的

实现接口的代码例子:

public class ButtonListener implements ActionListener { 
	//引用传递
	//定义文本框变量,用来保存传递过来的文本框对象
	public JTextField jt;
	
	
	//动作处理方法
	public void actionPerformed(ActionEvent e){
		//获取文本框内容
		String userName = jt.getText();
		
		//比较内容是否一样:equals
		//比较地址是否一样:==
		if("123".equals(userName)){
			System.out.println("yes");
			JFrame jf = new JFrame();
			jf.setSize(400, 400);
			jf.setTitle("对话框");
			JLabel jl = new JLabel("账号密码验证成功");
			jf.add(jl);
			jf.setLocationRelativeTo(null);
			//设置可见
			jf.setVisible(true);
		}
		else{
			System.out.println("no");
			JFrame jf = new JFrame();
			jf.setSize(600, 600);
			jf.setTitle("对话框");
			JLabel jl = new JLabel("账号密码验证失敗",JLabel.CENTER);
			
			jf.add(jl);
			jf.setLocationRelativeTo(null);
			
		
			
			//设置可见
			jf.setVisible(true);
		}
	}
}

继承的代码:

public class UNStudent extends Student{}

继承类型写法与解释

/**
 * 大学生类
 * 继承:extends
 * public class 子类(派生类) extends 父类(基类) implements 接口,接口,,{}
 * 继承中父类只有一个,并不像接口一样可以拥有很多个。
 * 子类会继承父类中的属性和方法,私有属性和方法不能直接使用
 * @author liu
 */

继承的代码例子:

public class UNStudent extends Student{

	public void printName(){
		System.out.println("名字:"+getName());
	}
	//方法重写(覆盖)
	//1.有继承关系的两个类之间     2.返回值类型,方法名,参数类型(个数,顺序)完全一样
	public void study(){
		System.out.println("子类重写父类的学习方法!");
		}
}

综上所述

实现接口与继承的区别

1.不同的关键字,即实现接口(implements),继承(extends);

2.在面向对象编程的时候只能是单继承,但是实现接口可以有多个,简单点说,就是实现接口可以有好多个,但是继承的中父类只能只有一个,因为父亲只有一个,这说明了继承在Java中具有单根性,子类只能去继承一个父类;

3.在接口中只能定义全局变量和抽象方法,而在继承中可以定义属性方法,变量,常量的等等…

4.当某个接口被实现的时候,在类中一定要用接口中的抽象方法,而继承中子类能随意调用父类的属性和方法,毫无压力的;

5.当你需要去调用接口时,接口中的抽象方法是一定需要写上去的,即使在抽象方法你并不需要去实现什么样的功能,但这个步骤是一定不能少的;但是在继承中并不是这样的,当子类需要实现的功能和父类中的实现功能毫无差别的时候,则父类中的实现方法可写可不写,但是当你想要在你的子类中去实现某些特有的功能时,这时候需要将父类中的实现方法去重写,以实现在子类中所需要的特定功能。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 重写hashCode()和equals()方法详细介绍

    重写hashCode()和equals()方法详细介绍

    这篇文章主要介绍了重写hashCode()和equals()方法详细介绍,涉及重写equals()方法,重写hashCode()方法,重写equals()而不重写hashCode()的风险等相关内容的介绍,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • springboot如何实现导入其他配置类

    springboot如何实现导入其他配置类

    这篇文章主要介绍了springboot如何实现导入其他配置类问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • ActiveMQ中consumer的消息确认机制详解

    ActiveMQ中consumer的消息确认机制详解

    这篇文章主要介绍了ActiveMQ中consumer的消息确认机制详解,对于broker而言,只有接收到确认指令,才会认为消息被正确的接收或者处理成功了,InforSuiteMQ提供以下几种Consumer与Broker之间的消息确认方式,需要的朋友可以参考下
    2023-10-10
  • Java实现音频添加自定义时长静音的示例代码

    Java实现音频添加自定义时长静音的示例代码

    这篇文章主要介绍了一个Java工具类,可以实现给一个wav音频添加自定义时长静音。文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编学习一下
    2022-01-01
  • Java 高并发二:多线程基础详细介绍

    Java 高并发二:多线程基础详细介绍

    本文主要介绍Java 高并发多线程的知识,这里整理详细的资料来解释线程的知识,有需要的学习高并发的朋友可以参考下
    2016-09-09
  • 带你了解如何使用Spring基于ProxyFactoryBean创建AOP代理

    带你了解如何使用Spring基于ProxyFactoryBean创建AOP代理

    这篇文章主要介绍了Spring基于ProxyFactoryBean创建AOP代理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-08-08
  • 浅谈Sharding-JDBC强制路由案例实战

    浅谈Sharding-JDBC强制路由案例实战

    本文主要介绍了浅谈Sharding-JDBC强制路由案例实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 浅谈Arrays.asList()方法的使用

    浅谈Arrays.asList()方法的使用

    本文主要介绍了Arrays.asList()方法的使用。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • jdk环境变量配置切换jdk版本及安装jdk后环境变量不生效问题解决办法

    jdk环境变量配置切换jdk版本及安装jdk后环境变量不生效问题解决办法

    这篇文章主要介绍了jdk环境变量配置切换jdk版本及安装jdk后环境变量不生效问题解决办法,包括配置JAVA_HOME、Path和CLASSPATH,以及如何验证配置是否成功,文章还讲解了如何切换JDK版本,并解决了安装新JDK后环境变量配置不生效的问题,需要的朋友可以参考下
    2024-12-12
  • Java中常用的设计模式之建造者模式详解

    Java中常用的设计模式之建造者模式详解

    这篇文章主要为大家详细介绍了Java中常用的设计模式之建造者模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02

最新评论