JAVA抽象类和接口Wonder_b

JAVA 抽象类和接口

一、抽象类

定义

  • 在继承的层次结构中,每个新子类都使类变得越来越明确和具体。如果从一个子类追溯到父类,类就会变得更通用、更加不明确。类的设计应该确保父类包含它的子类的共同特征。有时候,一个父类设计得非常抽象,以至于它都没有任何具体的实例。这样的类称为抽象类(abstract class)

提示:抽象类不可以用于创建对象。抽象类可以包含抽象方法,这些方法将在具体的子类中实现

因为类的设计应该确保父类包含它的子类的共同特征,所以父类应该具有同一类型子类共有的一些方法,例如GeometricObject类 定义成 Circle 类和 Rectangle 类的父类。而Circle 类和 Rectangle 类分别包含计算圆和矩形的面积和周长的方法 getArea()和 getPerimeter(),所以最好在GeometricObject 类中定义 getArea() 和 getPerimeter() 方法 (如下图) 。但是,这些方法不能在 GeometricObject类中实现,因为它们的实现取决于几何对象的具体类型。这样的方法称为抽象方法(abstract method )

public abstract class GeometricObject {
	public String color = "white";
	private boolean filled;
	private java.util.Date dateCreated;
	
	protected GeometricObject() {
		dateCreated = new java.util.Date();
	}
	
	protected GeometricObject(String color, boolean filled) {
		dateCreated = new java.util.Date();
		this.color = color;
		this.filled = filled;
	}
	
	public abstract double getArea();
	
	public abstract double getPerimeter();
}

创建一个抽象类的方法及注意点

  • 从上图GeometricObject类可知,一个抽象类需要在方法头中用abstract修饰符表示。
  • 抽象类和常规类很像,但是不能使用 new 操作符创建它的实例。一个包含抽象方法的类必须声明为抽象类。
  • 抽象类的构造方法定义为 Protected, 因为它只被子类使用。创建一个具体子类的实例时,它的父类的构造方法被调用以初始化父类中定义的数据域。

二、接口

定义

  • Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
  • 接口在许多方面都与抽象类很相似,但是它的目的是指明相关或者不相关类的多个对象的共同行为。
  • 同时,接口只包含常量和抽象方法(即只有方法标识符,而没有方法体)。
    **

java之所以使用接口的最大原因:

Java不像C++一样支持多继承,而通过接口可以弥补这个局限。

创建接口

为了区分接口和类,Java 采用下面的语法来定义接口:

修饰符 interface 接口名{
/** 常数声明 */
/** 方法签名 */
}

举例:

1.创建一个Something接口:

public interface Something {
	void doSomething();
}

2.创建一个ClassA类:

public class ClassA {
	public void doSomething() {
		System.out.println("A doSomething");
	}
}

3.分别继承Something接口和ClassA类 :

public class TestSomething extends ClassA implements Something{
	public void doSomething() {
		System.out.println("B doSomething");
	}

	public static void main(String[] args) {
		ClassA a1 = new TestSomething();
		a1.doSomething();
		
		a1 = new ClassA();
		a1.doSomething();
	}
}

提示:这需要使用 implements 关键字让对象的类实现这个接口来完成。
类和接口之间的关系称为接口继承( interface inheritance)。因为接口继承和类继承本质上是相同的,所以我们将它们都简称为继承。

抽象类和接口的比较

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值