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类型的。