Java的接口和抽象类(实例加UML完整例子)

Java的接口和抽象类

1.抽象类

1.1 语法

  抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰
  抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为你不能用它来做任何事情。对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了。

[public] abstract class ClassName {
    abstract void fun();
}

  抽象类和普通类的主要有三点区别:

  1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。

  2)抽象类不能用来创建对象;

  3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

2.接口

2.1 语法

  接口是对行为的抽象。
  接口类和普通类的主要有三点区别:
  1)接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),
  2)方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误),并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法

[public]  class ClassName implements Interface1,Interface2,[....]{
}

3.接口和抽象在设计层面的意义

  抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。比如小鸟会飞,但是这个飞,不应该设计为一个事物类(抽象类),它只是一种行为。

3.1 接口

  接口却是对类局部(行为)进行抽象。比如飞可以设计一个接口类,鸟可以去实现这个接口,飞机也可去实现这个接口,从而拥有飞的能力。

3.2 抽象

  抽象类是对整个类整体进行抽象,包括属性、行为,比如鸟可以设计一个事物类(包含翅膀,羽毛,爪子,飞)。

3.3 应用场景

  门可以分为有拥有火灾报警功能,没有火灾报警功能,但是它们都有共有功能就是,打开功能,关闭功能,请用类图和代码描述并解释为什么这么设计。

3.3.1 实现思路

  象共有的行为,可以放到抽象类门中,当子类其它门继承这个抽象类,就都有了共有的行为。象特殊的行为,可以放到接口中,有需要就实现这个特殊行为接口,没有需求就可以不实现。实际上继承是一个 "是不是"的关系,而 接口 实现则是 "有没有"的关系。

3.3.3 UML类图

在这里插入图片描述

3.3.3 实现场景

/**
 * @author tbb
    *   抽象类门
 */
public abstract class Door 
{
	/**
	   *  打开功能
	 */
	 abstract void open();
	/**
	   *   关闭功能
	 */
	 abstract void close();
     
}
/**
 * @author tbb
 *      火灾报警接口类
 */
public interface FireAlarm 
{
    /**
           * 火灾报警功能
     */
    void alarm();
}
/**
 * @author tbb
    *   铝合金门
 */
public class AluminumDoor extends Door implements FireAlarm
{

	@Override
	public void open() 
	{
		System.out.println("打开门");
	}

	@Override
	public void close() 
	{
		System.out.println("关闭门");
	}

	@Override
	public void alarm() 
	{
		System.out.println("火灾报警");
	}

}



/**
 * @author tbb
   *    木门
 */
public class WoodenDoor extends Door{

	@Override
	public void open() 
	{
		System.out.println("打开门");
	}

	@Override
	public void close() 
	{
		System.out.println("关闭门");
	}

}
发布了56 篇原创文章 · 获赞 1 · 访问量 1168

猜你喜欢

转载自blog.csdn.net/atu1111/article/details/105286270