抽象类详解

1、抽象类定义:当描述一个类的时候,如果不能确定其功能函数如何定义,那么该类就可以定义为抽象类,不能确定的功能函数要描述为抽象函数。

比如:动物叫,狗是旺旺叫,猫是喵喵叫,而羊是咩咩叫......所以在动物类里无法定义“叫”这个功能函数,所以该方法需要使用抽象方法,再在继承动物类的具体子类里根据自己的情况再去实现。

2、抽象类的特点:

(1)含有抽象函数的类一定是抽象类,但是抽象类不一定有抽象函数;

(2)抽象类不能使用new创建对象,因为创建对象,都需要使用对象的功能,而抽象类中抽象的方法没有方法体,从而不能实例化;

(3)编译器强制子类实现抽象父类中未实现的方法,也可以不实现,但是子类必须也声明为抽象类;

(4)抽象类主要是为了提高代码的复用性,让子类继承来使用;

(5)抽象类可以继承普通类与抽象类。

3、抽象类的优点:

(1)提高代码的复用性;

(2)提高代码的可扩展性,便于后期的代码维护。

4、抽象类不能创建对象,那么抽象类中是否含有构造函数?

抽象类中一定含有构造函数,主要是为了初始化抽象类中的属性,通常由子类完成初始化。

需要注意的是:abstract与final、static以及private都是不可以同时出现的。

final:它的作用就是修饰类代表不可以被继承,修饰方法代表不可以被重写。而abstract修饰的类就是用来被继承的,修饰方法就是用来被重写的。

static:修饰的方法是可以用类名调用的,但是对于abstract修饰的方法没有具体的实现,所以不可能直接调用;

private:修饰的只能在本类中使用,而abstract修饰的方法是用类被子类重写的,有矛盾,所以不能共存。

下面,而给出一个抽象类的小案例加以说明:

定义抽象类:MyShape

//定义一个抽象类 MyShape
public abstract class MyShape {
	//不同的形状计算其周长和面积的公式不一样,无法确定具体的方法,所以可以定义为抽象类,
	//再在具体形状的子类中实现各自的方法
	abstract double getLen();
	abstract double getArea();
}

定义子类:Rect

public class Rect extends MyShape {
	
	double width;
	double height;
	
	Rect(double width, double height){
		this.width = width;
		this.height = height;
	}
	
	@Override
	double getLen() {
		return 2*(width + height);
	}

	@Override
	double getArea() {
		return width * height;
	}

}

定义子类:Circle

public class Circle extends MyShape {
	
	double r;
	public static final double PI = 3.14;
	
	Circle(double r){
		this.r = r;
	}

	@Override
	double getLen() {
		return 2 * PI *r;
	}

	@Override
	double getArea() {
		return PI * r * r;
	}
	
}

编写测试类:

public class Test {
	
	public static void main(String[] args){
		Rect rect = new Rect(6,6);
		System.out.println(rect.getLen());
		System.out.println(rect.getArea());
		
		Circle circle = new Circle(6);
		System.out.println(circle.getLen());
		System.out.println(circle.getArea());
	}
}

运行结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值