java 接口

一、接口

  接口是抽象方法和常量值的定义的集合

  从本质上将,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。

  例:

public interface runner{
  public static final int id = 1;
  public void start();
  public void run();
  public void stop();        
}

  java是只支持单继承的,但现实之中存在于多重继承这种现象。因此可以借助接口帮助我们实现多重继承。  

  抽象类所具有的一些东西接口可以有,加入一个抽象类里面所有的方法都是抽象的,没有任何一个方法需要这种抽象类去实现,并且这个抽象类里面所有的变量都是静态(static)变量,都是不鞥改变(final)的变量,这时可以把这样的抽象类定义为一个借口(interface)。把一个类定义为一个借口的格式是把声明类的关键字class用声明借口的关键字interface替换掉。

  public interface JavaInterface{

  }

对于多继承来说,在一个子类对象里面实际上包含有多个父类对象,而对于但继承来书哦,子类对象里面只有一个父类对象。多继承子类对象就有多个父类对象,而这些父类对象之间可能游湖存在有重复的成员变量,这就非常容易出现问题,因此在java里面避免了这种问题的出现,采用了接口这种方式来实现多继承。作为接口来说,一个类可以从接口继承(或者叫接口实现),这也是多继承,接口里面的成员变量不专属于某个对象,都是惊天的成员变量,是属于整个类的,因此一个类去实现多个接口也是无所谓的,不会存在对象之间互相冲突的问题。实现多个接口,也即是实现多重继承,而且又避免了多重继承容易出现的问题,这就是用接口实现多重继承的好处。

二、接口特性

  1、接口可以多重实现

  2、接口中欧声明的属性默认为public static final的;也只能是public static final

  3、接口中只能定义抽象方法,而且这些方法默认为public,也只能是public的,

  4、接口可以继承其他的接口,并添加新的额属性和抽象方法。

package com.lost.interface1;

interface Painter
{
	public void eat();
	public void paint();
}
interface Singer
{
	public void sing();
	public void sleep();
}
class Student implements Singer
{
	private String name;
	public Student(String name)
	{
		this.name = name;
	}
	public String getName()
	{
		return this.name;
	}
	public void sing()
	{
		System.out.println("Stduent is singing");
	}
	public void sleep()
	{
		System.out.println("Student is sleeping");
	}
	public void study()
	{
		System.out.println("Studying.........");
	}
}

class Teacher implements Singer,Painter
{
	String name;
	public  Teacher(String name) {
		// TODO Auto-generated constructor stub
		this.name = name;
	}
	@Override
	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("teacher is eating");
	}

	@Override
	public void paint() {
		// TODO Auto-generated method stub
		System.out.println("teacher is painting");
	}

	@Override
	public void sing() {
		// TODO Auto-generated method stub
		System.out.println("teacher is singing");
	}

	@Override
	public void sleep() {
		// TODO Auto-generated method stub
		System.out.println("teacher is sleeping");
	}
	
	public String getName()
	{
		return this.name;
	}
	public void setName(String name)
	{
		this.name = name;
	}
	
}
public class TestInterfaces {
	public static void main(String[] arg)
	{
		Singer s1 = new Student("le");
		s1.sing();
		s1.sleep();
		Singer s2 = new Teacher("steven");
		s2.sing();
		s2.sleep();
		Painter p1 = (Painter)s2;
		p1.paint();
		p1.eat();
	}
}

  一个类可以实现多个无关的接口。多个无关的类也可以实现同一个接口。

原文地址:https://www.cnblogs.com/lobsterIT/p/4807307.html