Abstract类和接口的区别

1.先说Abstract类

(1).Abstract类不能被实例化

abstract class test
{
	public abstract void test1();
	public void test2()
	{
		System.out.println("test2");
	}
}

class Abstract 
{
	public static void main(String[] args) 
	{
		test t=new test();
		t.test2();
	}
}
会报一下错误:Abstract.java:14: test 是抽象的;无法对其进行实例化test t=new test();

 (2) 抽象类只能被继承,一个具体类继承一个抽象类,必须实
   现所有抽象方法。
abstract class test
{
	public abstract void test1();
	public abstract void test5();
	public void test2()
	{
		System.out.println("test2");
	}
}
class test3 extends test
{
	public void test2()
	{
		System.out.println("Son extends test3");
	}
	public void test1()
	{
		System.out.println("Son extends test1");
	}
}
class Abstract 
{
	public static void main(String[] args) 
	{
		test3 t3=new test3();
		t3.test2();
	}
}
如果是上面代码会报错,因为test5()没有被覆盖。

(3).

包含抽象方法的类,就一定是抽象类。 使用: abstract 关键字修饰,包含抽象方法。
(4).抽象方法,只有行为的概念,没有具体的行为实现。使用:abstract 关键字修饰,并且没有方法体。
2.接口
(1).全部的方法都是抽象方法,全部的属性都是常量。 接口用来表示纯抽象概念,没有任何具体的方法和属性。
(2).不能实例化,可以定义变量。
但是可以这样做:
<span style="color:#333333;">interface B
{
	public static final int a=9;
	void test1();
	void test2();
}
class C implements B
{
	public void test1()
	{
		System.out.println("test1");
	}
	public void test2()
	{
		System.out.println("test2"+"---");
	}
}
class Test   
{
 public static void main(String[] args)
	{
	//C c=new C();
	//c.test1();
//	c.test2();
	//System.out.println(c.a);
</span><span style="color:#ff0000;">	B b=new C();</span><span style="color:#333333;">
	b.test1();
	System.out.println(b.a);
	}

}</span>

打印结果为:
test1
9
但是却不能C c=new B();这样是错误的。
(3).接口只能被实现(继承),一个具体类实现接口,必须使用全部的 抽象方法。
(4).接口之间可以继承。
(5).接口中的属性,默认是常量 public static final 
(6).接中的方法一定是:public abstract 
interface A
{
	public static final int a=9;
	public void test1();
}
class B implements A
{
	public void test1()
	{
		System.out.println("B");
	}
}
class Abstract 
{
	public static void main(String[] args) 
	{
		A a=new B();
		System.out.println(a.a);
	}
}
打印出结果为9。

对接口中定义的变量的访问

interface B
{
	public static final int a=9;
	void test1();
	void test2();
}
class C implements B
{
	public void test1()
	{
		System.out.println("test1");
	}
	public void test2()
	{
		System.out.println("test2"+"---");
	}
}
class Test   
{

public static void main(String[] args)
	{
	C c=new C();
		c.test1();
	c.test2();
	System.out.println(c.a);
	}

}

打印结果为:

test1
test2---
9

说明实现的类可以直接访问接口中定义的static final变量,注意在接口中定义的变量只能是static final类型的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章