接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法,那么它也必须重写这个接口中的所有方法,否则程序会报错。接口只是一种形式,接口自身不能做任何事情,但它能为很多类来使用,原本没有然后具体内容的接口在继承它的方法中得到方法的具体实现。

public interface Person {
 public static final int num=1000;
   public abstract void eat();
   public abstract void rest();

以上程序即为一个接口,在这里class变为了inferface。类的表现一共有三种形式:1、class,最为常见,一般的类。2、inferface,表示接口。3、abstract class,表示抽象类。此处设置了一个Person接口,并写了相应的属性和方法,但eat()和rest()并没有写具体的方法体,其具体内容需要在子类中实现。

public class Student implements Person {
    public void eat(){
    	System.out.println("学生天天在食堂吃饭");
    }
	public void rest(){
		System.out.println("学生每天按时在宿舍休息");
	}
}

Student 是Persond 子类,它重写的接口的方法(每一个方法都要重写)。

public class Main {
	public static void main(String[] args){

		Person uns=new Student();
		uns.eat();
		uns.rest();
	}}

在主函数中创建了对象uns,“Person uns=new Student();”此处发现了不一致的地方,出现了自动转型的概念,我们来解释一下。基本格式是:父类类型 对象名=new 子类构造方法(参数值);这个对象可以直接调用父类的方法,当出现多个子类继承一个父类的时候回十分方便。综合来说,这种方法可以提高程序的扩展性,提高代码的重用性,在java的编译机制中多处用到了自动转型。这种方法的缺点是使得子类失去了其特有的方法的调用。

抽象类和接口很接近,不同之处在于它可以写一下自己的函数,可以有自己的方法体,程序如下。

public abstract class Shape {
 public int color;
	public abstract void draw();
	public void setColor(int c)
	{
		this.color=c;
	}
	public int getColor()
	{
		return this.color;
	}
}

在这段程序里,我们用到了abstract class,抽象类。draw()没有写方法体,颜色的设置和获取写了具体的方法体。

public class LineShape extends Shape
{	
	public void draw()
	{
		System.out.println("我的画直线的方法");
	}
}

我们通过子类的继承来重写draw()方法。

public class Draw 
{
       public static void main(String[] args) 
       {
	     LineShape uns=new LineShape();
	     uns.draw();
       }
}

并通过一段主函数调用,程序很简单,但体现了抽象类的特点。

总结一下,在一个较大的程序开发中,接口的存在使得数十人乃至数百人共同开发一个程序成为了现实,抽象类也是在接口的基础上的一个变化 。这两个概念是java程序开发的基础,也是实现一些伟大想法的极大助力。