1:接口概述
* 从狭义的角度讲就是指java中的interface
* 从广义的角度讲对外提供规则的都是接口
* B:接口特点
* a:接口用关键字interface表示
* interface 接口名 {}
* b:类实现接口用implements表示
* class 类名 implements 接口名 {}
* c:接口不能实例化
* 那么,接口如何实例化呢?
* 按照多态的方式来实例化。
* d:接口的子类
* a:可以是抽象类。但是意义不大。
* b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)
* C:案例演示
* 接口特点
public class Demo_Interface { public static void main(String[] args){ Demo q = new Demo(); q.print(); System.out.println(Inter.a); } } interface Inter{ public static final int a=10; /*public Inter(){} 接口中没有构造方法 public void a(){ 不允许接口中有方法体 }*/ public abstract void print(); } class Demo implements Inter{ int a=22; public void print() { // TODO Auto-generated method stub System.out.println(a); } }
运行结果:
22
10
注意:Inter.a
2.接口成员特点
* 成员变量只能是常量,并且是静态的并公共的。
* 默认修饰符:public static final
* 建议:自己手动给出。
* 构造方法:接口没有构造方法。
* 成员方法:只能是抽象方法。
* 默认修饰符:public abstract
* 建议:自己手动给出。
* B:案例演示
* 接口成员特点
注意:
在Demo类中创建了个空参构造,这个空参构造是继承Object,所有类未声明都是继承Object,本程序中Demo类中空参构造就是为了声明Object在程序中不起作用.
3.类与类,类与接口,接口与接口的关系
* a:类与类:
* 继承关系,只能单继承,可以多层继承。//多层继承就是每一个类都往上继承一个
* b:类与接口:
* 实现关系,可以单实现,也可以多实现。//注意类与接口是实现关系
* 并且还可以在继承一个类的同时实现多个接口。
* c:接口与接口:
* 继承关系,可以单继承,也可以多继承。
注意:类多实现的方法,接口多实现多继承的方法
4.抽象类和接口的区别
A:成员区别
* 抽象类:
* 成员变量:可以变量,也可以常量
* 构造方法:有
* 成员方法:可以抽象,也可以非抽象
* 接口:
* 成员变量:只可以常量
* 成员方法:只可以抽象
* B:关系区别
* 类与类
* 继承,单继承
* 类与接口
* 实现,单实现,多实现
* 接口与接口
* 继承,单继承,多继承
* C:设计理念区别
* 抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
* 接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。
* 对事物本质的抽象用抽象类,对事物功能的扩展用接口
5.猫狗案例加入跳高功能分析及其代码实现
* A:案例演示
* 动物类:姓名,年龄,吃饭,睡觉。
* 猫和狗
* 动物培训接口:跳高
案例:
public class Test1_Animal1 { public static void main(String[] args){ Cat c = new Cat("加菲",8); c.eat(); c.sleep(); JumpCat j=new JumpCat("跳高猫",3); j.eat(); j.sleep(); j.jump(); } } abstract class Animal{ private String name; private int age; public Animal(){} public Animal(String name,int age){ this.setName(name); this.setAge(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 abstract void sleep(); } interface Jumping{ public void jump(); } class Cat extends Animal{ public Cat(){ } public Cat(String name,int age){ super(name,age); } public void eat() { // TODO Auto-generated method stub System.out.println("猫吃鱼"); } public void sleep() { // TODO Auto-generated method stub System.out.println("侧着睡"); } } class JumpCat extends Cat implements Jumping{ public JumpCat(){} public JumpCat(String name,int age){ super(name,age); } public void jump() { // TODO Auto-generated method stub System.out.println("猫跳高"); } }
输出结果:
猫吃鱼
侧着睡
猫吃鱼
侧着睡
猫跳高