首页 > 代码库 > Java之接口
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(); } }
本文出自 “11831428” 博客,请务必保留此出处http://11841428.blog.51cto.com/11831428/1859002
Java之接口