Java抽象类

一、概念

有时候,一个父类设计得非常抽象,以至于它都没有任何具体的实例。这样的类称为抽象类

抽象方法,是指没有方法体的方法,同时抽象方法还必须使用关键字abstract做修饰。

而拥有抽象方法的类就是抽象类,抽象类要使用abstract关键字声明。

二、定义

定义代码如下:

abstract class 抽象类名 {
	
	public void 普通方法名1 {
		...
	}
	
	public abstract void 抽象方法名;
	
}

三、注意点

1.包含抽象方法的类就会自动变成抽象类;

2.抽象方法被用来确保派生类会实现这个方法;

3.不论抽象类是否含抽象方法,其都不允许实例化;

4.若父类是抽象类,且子类不想成为抽象类,则子类必须将父类中的所有抽象方法重写为带方法体的普通方法;

5.使用原则:

(1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public;
(2)抽象类不能直接实例化,需要依靠子类采用向上转型的方式处理;
(3)抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类;
(4)子类如果不是抽象类则必须覆写抽象类之中的全部抽象方法;

四、实例

(一)代码

定义的GeometricObject普通类代码如下:

public class GeometricObject {
    private String color = "white";
    private boolean filled;
    private java.util.Date dateCreated;
    
    public GeometricObject() {
    	dateCreated = new java.util.Date();
    }
    
    public GeometricObject(String color, boolean filled) {
    	dateCreated = new java.util.Date();
    	this.color = color;
    	this.filled = filled;
    }
    
    public String getColor() {
    	return color;
    }
    
    public void setColor(String color) {
    	this.color = color;
    }
    
    public boolean isFilled() {
    	return filled;
    }
    
    public void setFilled(boolean filled) {
    	this.filled = filled;
    }
    
    public java.util.Date getDateCreated(){
    	return dateCreated;
    }
    
    public String toString() {
    	return "created on " + dateCreated + "\ncolor: "
         + color + " and filled: " + filled;
    }
}

定义的GeometricObject抽象类代码如下:

public class GeometricObject {
    private String color = "white";
    private boolean filled;
    private java.util.Date dateCreated;
    
    public GeometricObject() {
    	dateCreated = new java.util.Date();
    }
    
    public GeometricObject(String color, boolean filled) {
    	dateCreated = new java.util.Date();
    	this.color = color;
    	this.filled = filled;
    }
    
    public String getColor() {
    	return color;
    }
    
    public void setColor(String color) {
    	this.color = color;
    }
    
    public boolean isFilled() {
    	return filled;
    }
    
    public void setFilled(boolean filled) {
    	this.filled = filled;
    }
    
    public java.util.Date getDateCreated(){
    	return dateCreated;
    }
    
    public String toString() {
    	return "created on " + dateCreated + "\ncolor: "
         + color + " and filled: " + filled;
    }

    public abstract double getArea();

    public abstract double getPerimeter();
}

(二)区别

区别在于抽象类多了如下代码:

public abstract double getArea();

public abstract double getPerimeter();

这使得GeometricObject的子类中计算几何对象面积和周长的方法在GeometricObject类中都可以实现。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值