本帖最后由 徐帅 于 2012-7-22 11:26 编辑
1. 抽象类和一般类 抽象类和一般类没有太大的不同。该如何描述事物,就如何描述事物,只不过, 该事物出现了一些看不懂的东西。 这些不确定的部分,也是该事物的功能,需要明确出现。但是无法定义主体。通过抽象方法来表示。抽象类比一般类多 个了抽象函数。就是在类中可以定义抽象方法。 2.接口的应用特点:
1> 接口是对外暴露的规则。 2> 接口是功能的扩展。 3> 接口的出现降低了耦合性。 4> 接口型引用指向子类对象(多态)提高的程序扩展性,呈现多态 2 抽象类和接口异同: 相同点:
1> 都可以在内部定义抽象方法。 2> 通常都在顶层。 3> 都不可以实例化,都需要子类来实现。 不同点: 1> 抽象类中可以定义抽象方法和非抽象方法, 而接口中只能定义抽象方法。 2> 接口的出现可以多实现。抽象类只能单继承。 也就是说:接口的出现避免了单继承的局限性。 3> 继承和实现的关系不一致。继承:is a,实现:like a !!! 基本功能定义在类中,扩展功能定义在接口中
电脑的例子,各个厂商按照规则生产不同的主板和声卡,网卡等各种卡,主板为后期可能产生的各种卡提供了扩展的接口,
只要符合这个接口的规则就可以使用,依赖性降低,提高了扩展性,而有些卡是扩展的功能,前期不一定知道
会有这种功能。只要提供了规则就可以,所以降低了耦合性,而抽象类则提供了一般的功能,如果继承则将必须实现所有的抽象方法,
有的抽象类中还有非抽象方法,这样继承则可能出现冗杂性,而且具有但继承的局限性,java通过多实现来用多实现方法来体现多继承的特性
以下是实例,
interface PCI
{
public void open();
public void close();
}
class MainBoard
{
public void run()
{
System.out.println("mainboard run ");
}
public void usePCI(PCI p)//PCI p = new NetCard()//接口型引用指向自己的子类对象。
{
if(p!=null)
{
p.open();
p.close();
}
}
}
class NetCard implements PCI
{
public void open()
{
System.out.println("netcard open");
}
public void close()
{
System.out.println("netcard close");
method();
}
}
class SoundCard implements PCI
{
public void open()
{
System.out.println("SoundCard open");
}
public void close()
{
System.out.println("SoundCard close");
}
}
class DuoTaiDemo5
{
public static void main(String[] args)
{
MainBoard mb = new MainBoard();
mb.run();
mb.usePCI(null);
mb.usePCI(new NetCard());
mb.usePCI(new SoundCard());
}
}
希望可以帮到你,有些表达不是很好,呵呵。
|