接口
接口概念
.接口就似乎一种公共规范的标准,只要符合规范标准,大家都有的用 例如市面上所有的usb接口都是一样的,就是遵循了那么一种规范
.java中的接口更多的体现在对行为的抽象
接口的特点
1.接口用关键字interface表示
public interface 接口名{}
2.类接口的实现用implements表示
public class 类名 interface 接口名{}
3.接口不能实例化
接口如何进行实例化呢? 参照多态的方式,通过对实现类对象进行实例化,这叫做接口多态。
多态的形式:具体类多态,抽象类多态,接口类多态
多态的前提:有继承关系和实现关系;有方法重写;有(父/接口)类引用指向(子类/实现)类对象
4.接口的实现类
要么重写接口中的抽象方法
要么是抽象实现类
接口的成员特点
1.成员变量
只能是常量
默认修饰符:public static final
2.构造方法
接口没有构造方法,因为接口主要是对行为进行抽象的,是没有具体的存在
一个类如果没有父类,默认继承object类
3.成员方法
只能是抽象方法
默认修饰符 public static
4.关于接口中的方法,jdk8 和jdk9 中有一些新特性,以后再讲
以下为接口类的 猫狗案例 分为五个类
1.animal
2.animaldemo
3.cat
4.dog
5.inter接口类
案例分析
需求:
.对猫和狗进行训练,他们就可以跳高了,这里加入了调高功能,请采用抽象类和接口类来实现猫狗案例,并在测试类中进行测试
思路:
1.定义接口类(jumpping)
.成员方法:跳高();
2.定义动物类(animal)
.成员变量:姓名,年龄
.构造方法:带参,无参
.成员方法:get/set方法,吃饭();
2.定义猫类(cat)继承动物类,实现跳高接口
.构造方法:带参,无参
.成员方法:重写吃饭{},重写跳高{}
3.定义狗类(dog)继承动物类,实现跳高接口
.构造方法:带参,无参
.成员方法:重写吃饭{},重写跳高{}
4.定义测试类(animaldemo),写测试代码
1.animal
package 接口案例_猫和狗;
public abstract class animal {
private String name;
private int age;
//------成员变量------------------------------
public abstract void eat();
//------成员方法------------------------------
/**
*
*/
public animal() {
}
/**
* @param name
* @param age
*/
public animal(String name, int age) {
this.name = name;
this.age = age;
}
//------构造方法------------------------------
/**
* @return name
*/
public String getName() {
return name;
}
/**
* @param name 要设置的 name
*/
public void setName(String name) {
this.name = name;
}
/**
* @return age
*/
public int getAge() {
return age;
}
/**
* @param age 要设置的 age
*/
public void setAge(int age) {
this.age = age;
}
//------get/set------------------------------
}
2.animaldemo
package 接口案例_猫和狗;
public class animaldemo {
/*
需求:
.对猫和狗进行训练,他们就可以跳高了,这里加入了调高功能,请采用抽象类和接口类来实现猫狗案例,并在测试类中进行测试
思路:
1.定义接口类(jumpping)
.成员方法:跳高();
2.定义动物类(animal)
.成员变量:姓名,年龄
.构造方法:带参,无参
.成员方法:get/set方法,吃饭();
2.定义猫类(cat)继承动物类,实现跳高接口
.构造方法:带参,无参
.成员方法:重写吃饭{},重写跳高{}
3.定义狗类(dog)继承动物类,实现跳高接口
.构造方法:带参,无参
.成员方法:重写吃饭{},重写跳高{}
4.定义测试类(animaldemo),写测试代码
*/
public static void main(String[] args) {
//无参构造方法 猫
inter i = new cat();
i.jummping(); //因为在接口类里面只定义了一个jumping,所以在调用的时候,就只能调用一个jumping
animal a = new cat ();
a.setAge(5);
a.setName("加菲");
System.out.print(a.getAge()+"岁的猫 "+a.getName()+" 喜欢");
a.eat();
((cat)a).jummping();
// ((cat)a).jummping();这种强制转换能用
//带参构造方法 猫
a = new cat ("及算法",15);
System.out.print(a.getAge()+"岁的猫 "+a.getName()+" 喜欢");
a.eat();
//无参构造方法 狗
i = new dog();
i.jummping();
a = new dog ();
a.setAge(5);
a.setName("旺财");
System.out.print(a.getAge()+"岁的狗 "+a.getName()+" 喜欢");
a.eat();
((dog)a).jummping();
//带参构造方法 狗
a = new dog ("长白山吊睛白额狗",23);
System.out.print(a.getAge()+"岁的狗 "+a.getName()+" 喜欢");
a.eat();
}
}
3.cat
package 接口案例_猫和狗;
public class cat extends animal implements inter {
@Override
public void jummping() {
// TODO 自动生成的方法存根
System.out.println("跳了2米");
}
@Override
public void eat() {
// TODO 自动生成的方法存根
System.out.println("吃鱼");
}
//-------构造方法---------------------------------
/**
*
*/
public cat() {
super();
// TODO 自动生成的构造函数存根
}
/**
* @param name
* @param age
*/
public cat(String name, int age) {
super(name, age);
// TODO 自动生成的构造函数存根
}
}
4.dog
package 接口案例_猫和狗;
public class dog extends animal implements inter {
@Override
public void jummping() {
// TODO 自动生成的方法存根
System.out.println("跳了18米");
}
@Override
public void eat() {
// TODO 自动生成的方法存根
System.out.println("吃骨头");
}
//--------------构造方法-------------
/**
*
*/
public dog() {
super();
// TODO 自动生成的构造函数存根
}
/**
* @param name
* @param age
*/
public dog(String name, int age) {
super(name, age);
// TODO 自动生成的构造函数存根
}
}
5.inter接口类
package 接口案例_猫和狗;
public interface inter {
public abstract void jummping();
}