Java(8)接口

1、接口概述
所谓接口就是一种公共的规范标准,只要符合规范,大家都可以通用java中的接口更多的体现在对行为的抽象

2、接口的特点

  • 接口用关键字interface修饰
    public interface 接口名{}

  • 类实现接口用implements表示
    public class 类名 implements 接口名{}

  • 接口不能实例化
    接口也可以参照多态的方式,通过实现类对象实例化,这叫接口多态
    多态的形式:具体多态,抽象类多态,接口多态
    多态的前提:有继承或者实现关系;有方法重写;有父(类、接口)
    引用指向(子、实现)类对象

  • 接口的实现类
    要么重写接口中的所有方法
    要么成为抽象类

3、接口的成员特点

  • 成员变量
    只能是变量
    因为默认带有修饰符:public static final
  • 构造方法
    接口没有构造方法,因为接口主要是对行为进行抽象的,是没有具体存在的
  • 成员方法
    只能是抽象方法
    默认修饰符:public abstract
    关于接口的方法,JDK8和JDK9中有一些新特性

问题:既然接口没有构造方法,那么在一个类实现(implements)了一个接口的时候,根据我们之前所学,每个类的构造方法都会调用父类的构造方法,那接口没有构造方法,调用的是谁的构造方法呢???

当一个类没有父类时候,就会默认继承Object类!!!

练习:
首先建立一个接口

package animals;

public interface Jump {
	public abstract void jumping();
}

然后建立animal的抽象类以及cat和dog的类。

package animals;

public abstract class Animal {
private String name;
private String age;

public Animal() {

}

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

public String getName() {
	return name;
}

public void setName(String name) {
	this.name = name;
}

public String getAge() {
	return age;
}

public void setAge(String age) {
	this.age = age;
}

public abstract void eat();
}

package animals;

public class Cat extends Animal implements Jump{
@Override

public void eat() {
	System.out.println("cat eat fish!");	
}

@Override
	public void jumping() {
		// TODO Auto-generated method stub
	System.out.println("cat can jump!");	
	}

public Cat() {
	super();
}

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

package animals;

public class Dog extends Animal implements Jump{
	public Dog() {
		super();
	}

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

@Override
public void eat() {
	// TODO Auto-generated method stub
System.out.println("dog eat bone~");	
}

@Override
public void jumping() {
	// TODO Auto-generated method stub
System.out.println("dog can jump!");	
}
}

然后在这里对其进行一些操作

package animals;

public class AnimalsDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Animal a=new Cat("lqy","10");
		a.eat();
		//a.jump();
	
		Jump b=new Cat("pj","12");
		b.jumping();
		//b.eat();
	
		Cat c=new Cat("wwa","55");
		c.eat();
		c.jumping();
	}

}

接口和类的关系

  • 类和类:继承关系,只能单继承(只能拥有一个父类),但是可以多层继承(父类也能拥有一个父类)
  • 类和接口:实现关系(implements),也可以多实现,还可以在继承一个类的同时实现多个接口(接口名用逗号隔开)
  • 接口和接口:继承关系,可以单继承,也可以多继承(不是多层继承!多继承意味着可以拥有多个父类(同样继承接口名用逗号隔开))

抽象类和接口的区别

  • 成员区别
    抽象类: 常量;变量;有构造方法;有抽象方法;也有非抽象方法
    接口: 常量;抽象方法

  • 关系区别
    类与类 继承;单继承
    类与接口 实现;可以单实现;也可以多实现
    接口与接口 继承;单继承;多继承

  • 设计理念的区别
    抽象类 对类抽象,包括属性、行为
    接口 对行为抽象、主要是行为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值