Java基础---面向对象(6)[接口]


接口

1.接口的引入
接口就是原来的类没有经过特殊的培养或者是操作以后所具备的功能。

2.接口的特点
(1).接口使用关键字interface表示
interface 接口名 {}
(2).类实现接口使用impliments表示
class impliments 接口名 {}
(3).接口不能够实例化
那么,如何实例化呢?
按照多态的方式来实例化
(4).接口的子类
A:可以是抽象类,但是意义不大
B:可以是具体的类。但是要重写接口中所有的抽象方法(推荐方案)

综上所述:
A:具体类多态(几乎没有)
B:抽象类多态(常用)
C:接口多态(最常用,也就是说接口也属于多态的表现)

3.接口的成员特点
(1).成员变量:只能够使常量,并且是静态的。
默认修饰符:public static final(写不写都是这样的)
建议手动给出

(2).构造方法:接口没有构造方法

(3).成员方法:只能够是抽象方法
默认修饰符 :public abstract
建议手动给出

(4).代码使用:
//定义接口
public interface Inter {
public int num=10;
public final int num2=20;
public final int num3=30;
//成员方法
public void show();
}

//定义接口的实现类
public class InterImpl extends Object implements Inter{
//接口中实际存在的形式默认继承自Object类
@Override
public void show() {
// TODO Auto-generated method stub
}
public InterImpl(){
//这一个时候super关键字走的是Object的
super();
}
}
//定义测试类
public class InterfaceDemo {
public static void main(String[] args) {
//创建对象
Inter i= new InterImpl();
System.out.println(i.num);
System.out.println(i.num2);
System.out.println("----------");
//由于接口奔上就是多态的一种,所以我们就类似于多态的使用来使用接口就可以了,也就是说创建对象以后调用成员变量
System.out.println(Inter.num);
System.out.println(Inter.num2);
System.out.println(Inter.num3);

}
}
//输出结果:
10
20
----------
10
20
30


4.类和类、类和接口、接口和接口的关系
(1).类和类
继承的关系,只能够单继承,可以多层继承

(2).类和接口
实现关系,可以单实现,也可以多实现。
并且还可以在继承一个类的同时实现多个接口

(3).接口和接口关系
继承关系,可以是单继承,也可以多继承。



5.抽象类和接口的区别
(1).成员区别
抽象类:
成员变量:可以是变量,也可以是常量
构造方法:有
成员方法:可以是抽象的,也可以是非抽象的。

接口:
成员变量:只可以是常量
成员方法:只可以是抽象



(2).关系区别
类与类
继承,单继承
类与接口
实现,单实现,多实现
接口与接口
继承,单继承,多继承


(3).设计理念的区别
抽象类:被继承提现的是"is a"的关系。抽象类中定义的该继承体系的共性功能。
接口:被实现体现的是"like a"的关系。接口中定义的是该继承体系的扩张功能。(也即是说像什么,具有这一个事物的一些特定的功能)

6.接口使用案例
(1).猫狗案例新增调高功能
A:分析:
猫:
名字,年龄
吃饭,睡觉

狗:
名字,年龄
吃饭,睡觉

由于具有共性,所以我们抽取出一个父类
动物:(抽象类)
名字,年龄
吃饭,睡觉

猫继承自动物类
狗继承自动物类

新增一个调高功能是一个新的扩张功能,所以我们要定义一个接口


接口:(抽象)
调高

部分猫实现调高
部分狗实现调高

(2).代码实现:
//动物类
public abstract class Animal {
//年龄
private String name;
//姓名
private int age;

//无参
public Animal(){}

//带参
public Animal(String name,int age){
this.name=name;
this.age=age;
}
//定义一个抽象方法吃饭
public abstract void eat();
//定义一个抽象方法睡觉
public abstract void sleep();

/**
* @return the name
*/
public String getName() {
return name;
}

/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}

/**
* @return the age
*/
public int getAge() {
return age;
}

/**
* @param age the age to set
*/
public void setAge(int age) {
this.age = age;
}
}
//猫类
public class cat extends Animal{
public cat(){}

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

@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("猫吃鱼");
}

@Override
public void sleep() {
// TODO Auto-generated method stub
System.out.println("猫趴着睡觉");
}
}
//狗类
public class dog extends Animal{
public dog(){}

public dog(String name,int age){
//使用super关键字来传递参数到父类的成员变量中
super(name,age);
}

@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("狗吃肉");
}

@Override
public void sleep() {
// TODO Auto-generated method stub
System.out.println("狗躺着睡觉");
}
}
//跳跃的接口
interface Jumpping {
//调高功能
public abstract void jump();
}

//实现跳跃接口的猫类
public class JumpCat extends cat implements Jumpping{
public JumpCat() {

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

@Override
public void jump() {
// TODO Auto-generated method stub
System.out.println("调高猫");
}
}
//实现跳跃接口的狗类
public class JumpDog extends dog implements Jumpping{
public JumpDog() {
// TODO Auto-generated constructor stub
}

public JumpDog(String name,int age) {
// TODO Auto-generated constructor stub
super(name,age);
}

@Override
public void jump() {
// TODO Auto-generated method stub
System.out.println("小狗跳高");
}
}
//实际使用测试类
public class InterfaceTest {
public static void main(String[] args) {
//定义调高猫并测试
JumpCat jcCat=new JumpCat();
jcCat.setAge(12);
jcCat.setName("加菲猫");
System.out.println(jcCat.getName()+"------"+jcCat.getAge());
jcCat.sleep();
jcCat.eat();
jcCat.jump();
System.out.println("-------------------");
JumpCat jcCat1=new JumpCat("哆啦A梦",13);
System.out.println(jcCat1.getName()+"------"+jcCat1.getAge());
jcCat1.sleep();
jcCat1.eat();
jcCat.jump();
}
}
//输出结果
加菲猫------12
猫趴着睡觉
猫吃鱼
小猫调高
-------------------
哆啦A梦------13
猫趴着睡觉
猫吃鱼
小猫调高


猜你喜欢

转载自www.cnblogs.com/nwxayyf/p/9541716.html