Java之接口

1.接口概述

我们知道一般狗就是看门,而猫一般是作为宠物的。但是,现在有很多的驯养员和驯兽师,可以训练出:猫钻火圈和狗跳高以及狗做计算等。而这些额外的动作,并不是所有猫或狗一开始就具备的。这应该属于经过特殊的培训训练出来的。所以,这些额外的动作定义到动作类中就不合适,也不适合直接定义到猫或狗中,因为只有部分猫狗具备这些功能。所以,为了体现事物功能的扩展性,Java就提供了接口来定义这些额外的功能,并不给出具体实现,将来那些猫狗需要被训练,只要将这部分猫和狗实现这部分额外的功能即可。

2.接口的特点

接口用关键字interface表示,格式:interface 接口名{}

类实现接口用implements表示,格式:class 类名 implements 接口名{}

接口不能实例化。

接口的子类,要么是抽像类或接口,要么重写接口中的所有抽象方法。接口与接口之间是继承。

package com;
//定义动物培训接口
interface AnimalTrain{
	/**
	 * 跳高
	 */
	public abstract void jump();
}
//抽象类实现接口
abstract class Cat implements AnimalTrain{

}
//具体类实现接口
class Dog implements AnimalTrain{

	@Override
	public void jump() {
		System.out.println("狗被训练跳高");
	}

}
public class InterfaceDemo {
	public static void main(String[] args) {

	}
}

3.接口的成员特点

成员变量:只能是常量并且是静态的。public static final

构造方法:接口没有构造方法。因为接口主要是扩展功能,所以接口不需要构造方法。

成员方法:只能是抽象方法,并且是public。public abstract

所有的类都默认继承来自一个类:Object。

类Ojbect是类层次结构的根类,每个类都使用Ojbect作为超类。

4.类与类,类与接口以及接口与接口之间的关系

类与类:继承关系,只能单继承,但是可以多层继承。

类与接口:实现关系,可以单实现,也可以多实现,还可以在一个类继承另一个类的同时实现多个接口。

接口与接口:继承关系,可以单继承,也可以多继承。

5.抽象类与接口的区别

成员区别:

抽象类: 变量 常量 抽象方法 普通方法

接口: 常量 抽象方法

关系区别

类与类: 继承 单继承

类与接口: 实现 单实现和多实现

接口与接口: 继承 单继承和多继承

设计理念区别

抽象类: 被继承 体现的是is a的关系,共性功能

接口: 被实现 体现的是like a的关系 扩展功能

6.案例

package cn;
/**
 * 接口--动作
 *
 */
interface Action{
	/**
	 * 跳高
	 */
	public void jump();
}
/**
 * 抽象类--动物类
 */
abstract class Animal{
	private String name;//姓名
	private int age;//年龄

	public Animal(){}
	public Animal(String name,int age){
		this.age = age;
		this.name = name;
	}

	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;
	}
	/**
	 * 吃饭
	 */
	public abstract void eat();
	/**
	 * 睡觉
	 */
	public  void sleep(){
		System.out.println("睡觉");
	}

}
/**
 * 具体猫类
 */
class Cat extends Animal{

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

	@Override
	public void eat() {
		System.out.println("猫吃鱼");
	}

}
/**
 * 有跳高功能的猫
 */
class JumpCat extends Cat implements Action{

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

	@Override
	public void jump() {
		System.out.println("猫跳高");
	}

}
/**
 * 具体狗类
 */
class Dog extends Animal{

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

	@Override
	public void eat() {
		System.out.println("狗吃肉");
	}

}
/**
 * 有跳高功能的狗
 */
class JumpDog extends Dog implements Action{

	@Override
	public void jump() {
		System.out.println("狗跳高");
	}

}
//测试类
public class InterfaceTest {
	public static void main(String[] args) {
		JumpCat jumpCat = new JumpCat("跳高猫哈哈", 3);
		System.out.println("姓名:"+jumpCat.getName()+",年龄:"+jumpCat.getAge());
		jumpCat.eat();
		jumpCat.sleep();
		jumpCat.jump();
	}
}
package com;
/**
 * 老师和学习案例,加入抽烟的额外功能
 * 具体:
 * 	老师:姓名 年龄 吃饭 睡觉
 *  学生:姓名 年龄 吃饭 睡觉
 *  由于有共性的功能,我们提取一个父类:人类
 *  
 *  人类:
 *  	姓名 年龄
 *  	吃饭 睡觉
 *  
 *  抽烟的额外功能不是人或者老师,或者学生一开始就应该具备的,所以我们把吸烟定义为接口
 *  
 *  抽烟接口
 *  部分老师抽烟:实现抽烟接口
 *  部门学生抽烟:实现抽烟接口
 */
//吸烟
interface Smoking{
	/**
	 * 吸烟
	 */
	public void smoke();
}
//抽象类--人类
abstract 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;
	}
	/**
	 * 吃饭
	 */
	public abstract void eat();
	/**
	 * 睡觉
	 */
	public void sleep(){
		System.out.println("睡觉");
	}
}
//具体老师
class Teacher extends Person{

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

	@Override
	public void eat() {
		System.out.println("老师吃素");
	}

}
//具体学生类
class Student extends Person{

	public Student(){}
	public Student(String name,int age){
		super(name, age);
	}
	@Override
	public void eat() {
		System.out.println("学生吃肉");
	}

}
//吸烟老师
class SmokeTeacher extends Teacher implements Smoking{

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

	@Override
	public void smoke() {
		System.out.println("吸烟的老师");

	}

}
//吸烟学生
class SmokeStudent extends Student implements Smoking{

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

	@Override
	public void smoke() {
		System.out.println("吸烟学生");
	}

}
public class InterfaceTest {
	public static void main(String[] args) {
		SmokeTeacher sTeacher = new SmokeTeacher("吸烟老师哈哈", 25);
		System.out.println("姓名:"+sTeacher.getName()+",年龄:"+sTeacher.getAge());
		sTeacher.eat();
		sTeacher.sleep();
		sTeacher.smoke();
	}
}
时间: 2024-08-25 06:52:22

Java之接口的相关文章

java中接口中成员的定义

java中的接口的作用是提供编程框架,它作为统一的规范让其他类进行扩展,是java中非常优秀的设计. 这娃用以下代码总结了java中接口可以定义的成员以及它们默认被修饰的关键字: //外部接口的访问修饰符只能是public或默认修饰符 ,并且它的成员只能用public访问修饰符修饰, 接口不能用final修饰 public interface A { //成员变量,默认用public static final 修饰 String name="ahei"; //成员方法,默认用publi

java中接口的定义与实现

1.定义接口 使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,当中接口体由常量定义和方法定义两部分组成.定义接口的基本格式例如以下: [修饰符] interface 接口名 [extends 父接口名列表]{ [public] [static] [final] 常量; [public] [abstract] 方法; } 修饰符:可选,用于指定接口的訪问权限,可选值为public.假设省略则使用默认的訪问权限. 接口名:必选參数,用于指定接口的名称,接口名

java中接口的使用

我们虽然写了两个文件,但是,两个文件中我们都是用了一个包mah. 我们可以在类中调用接口,看下面的例子 这是一个接口 [[email protected] java]# vim Output.java package mah; public interface Output { public static final int MAX_CACHE_LINE = 120; public abstract void out(); public abstract void getData(String

内功心法 -- Java标记接口

写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------这篇博客主要来谈谈"Java标记接口"的相关知识,主要内容包括: 1. 概述 2. Serializable 3. Cloneable 4. RandomAccess --------------------------------------------------------------------1.概述 Ja

深入理解Java的接口和抽象类(转)

深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然.今天我们就一起来学习一下Java中的接口和抽象类.下面是本文的目录大纲: 一.抽象类 二.接口 三.抽象类和接口的区别 若有不正之处,请多多谅解并欢迎批评指正,不甚感激. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.

java微信接口之四—上传素材

一.微信上传素材接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=ACCESS_TOKEN 其中ACCESS_TOKEN是我们动态获取的. 发送的数据: {"articles":[ { "thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXC

java微信接口之五—消息分组群发

一.微信消息分组群发接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=ACCESS_TOKEN   其中ACCESS_TOKEN是我们动态获取的.   发送的数据:(这里使用图文消息示例) { "filter":{ "group_id":"2" }, "mpnews":{ "me

(转载)深入理解java的接口和抽象类

本文转自地址:http://www.cnblogs.com/dolphin0520/p/3811437.html 作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然.今天我们就一起来学习一下Java中的接口和抽象类

Java的接口和抽象类

深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然.今天我们就一起来学习一下Java中的接口和抽象类.下面是本文的目录大纲: 一.抽象类 二.接口 三.抽象类和接口的区别 若有不正之处,请多多谅解并欢迎批评指正,不甚感激. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.

Java中接口和抽象类的比较

Java中接口和抽象类的比较-2013年5月写的读书笔记摘要 1. 概述 接口(Interface)和抽象类(abstract class)是 Java 语言中支持抽象类的两种机制,是Java程序设计使用多态性的基础[[1]].(在面向对象语言中,接口的多种不同的实现方式即为多态.多态性是允许你将父对象设置成为和一个或更多的他的子对象的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自"Delphi4编程技术内幕").简单的说,就是一句话:允许将子类类型的