类的抽象性知识点和示例

1,一个类继承了一个抽象类,需要实现父类的全部抽象方法或者声明为抽象类



2,抽象类方法的作用:


1)限制子类必须实现该方法,既然子类实现了该类的抽象方法,那么通过抽象父类就一定可以调用该方法(运行时多态)

2)解决编译时多态


3,如果一个类中包含抽象方法(没有方法体),那么这个类必须声明成抽象类。  抽象类不能实例化(new对象)。


4,抽象类是当作多态中的父类来用的。


下面是一个具体的例子,可以详细斟酌

简单来讲就是CloseFigure是一个抽象类方法,Rectangle和Circle两个类继承了它,而Rectangle类为了限制用它的类需要重写,就写成了abstract,但是它并没有抽象方法,Rectangle2类继承了Rectangle,如果它重写aa()方法,CloseFigureEx执行类就会调用重写的方法,否则就调用原来默认的aa()方法


/*
 * 抽象方法的作用:
 * 1.限制子类必须实现该方法。既然子类一定实现了该抽象方法,
 *   那么通过抽象父类的引用就一定可以调用该方法  ---运行时
 * 2.解决编译时多态。
 * 
 */

public abstract class CloseFigure {
	private String shape;
	
	/**
	 * 创建一个封闭图形
	 * @param shape图形形状
	 */
	public CloseFigure(String shape) {
		//super()
		this.shape = shape;
	}
	
	//抽象方法  用关键字:abstract
	public abstract double area();
	public abstract double perimeter();
	public abstract void bb();
	
	public void print(){
		System.out.println("一个"+shape+","+this.toString()+",面积:"+this.area()+",周长:"+this.perimeter());
	}
	
	//最终方法,子类不能覆盖
	public final void cc(){
		System.out.println("00000");
	}
}

public class Circle extends CloseFigure{
	private int r;
	private static double PI=3.1416;
	
	public Circle(int r) {
		super("圆");
		this.r = r;
	}
	public Circle() {
		this(0);
	}
	public int getR() {
		return r;
	}
	public void setR(int r) {
		this.r = r;
	}
	
	
	@Override
	public String toString() {
		return "半径:" + r;
	}
	
	
	@Override
	public double area() {
		return PI*r*r;
	}

	@Override
	public double perimeter() {
		return 2*PI*r;
	}
	
	@Override
	public void bb() {
		System.out.println("1111111111");
	}
}

/*
 * 1. 一个类继承了抽象父类,那么父类中的抽象方法要全部把它实现,
 *    否则只能声明成抽象类。
 * 2. 如果一个类中包含抽象方法(没有方法体),那么这个类必须声明成抽象类。
 *    抽象类不能实例化(new对象)。
 * 3. 抽象类是当作多态中的父类来用的。
 */

public abstract class Rectangle extends CloseFigure{
	private int width;//宽
	private int height;//高
	public Rectangle(int width, int height) {
		super("矩形");
		this.width = width;
		this.height = height;
	}
	
	
	/**
	 * 如果子类要实现***功能如从配置文件中读取字体,请覆盖该方法
	 */
	public void aa(){
	}
	
	
	public Rectangle() {
		this(0,0);
	}
	
	public int getWidth() {
		return width;
	}
	public void setWidth(int width) {
		this.width = width;
	}
	public int getHeight() {
		return height;
	}
	public void setHeight(int height) {
		this.height = height;
	}
	
	@Override
	public String toString() {
		return "长度:" + width + ", 高度:" + height;
	}
	
	public double area(){
		return width*height;
	}
	public double perimeter(){
		return (width+height)*2;
	}
	
	public void bb(){
		aa();//设置字体,如果不设,则用默认字体
		System.out.println("11111111111");
	}
}

package hncu.cn.baseCode.day008.para3;

public class Rectangle2 extends Rectangle{

	public Rectangle2() {
		super();
	}

	public Rectangle2(int width, int height) {
		super(width, height);
	}

//	@Override
//	public void aa() {
//		System.out.println("设置字体...");
//	}

}

package hncu.cn.baseCode.day008.para3;

public class CloseFigureEx {
	
	public static void main(String[] args) {
		//CloseFigure g = new CloseFigure();//WA: 抽象类不能实例化
		//Person p = new Student();
		CloseFigure g = new Rectangle2(100, 200);
		//System.out.println( g.area() );
		g.print();
		g.bb();
		
		System.out.println("------------");
		
		g = new Circle(10);
		//System.out.println( g.area() );
		g.print();
		
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值