最新消息:热烈庆祝IT小记上线!

Java读书笔记十四(java中的抽象类)

 

 前言

 在java中,有时候需要对类的行为进行提取,因此也就有了抽象类和接口的概念,这篇博客,小编来剖一下java中的抽象类和接口。


 抽象方法和抽象类

 抽象方法和抽象类的规则如下:

 1.抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽线方法不能有方法体

 2.抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。即使抽象类里不可包含抽象方法,这个抽象类也不能被创建实例。

 3.抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。

 4.含有抽象方法的类(包括直接定义了一个抽象方法;或继承实现了一个抽象父类,但没有完全实现父类包含的抽象方法;或实现了一个接口,但没有完全实现接口包含的抽象方法三种情况)能被定义成抽象类。


        这四点特别的重要,需要反复看,反复的理解。


 注意:需要注意的是抽象方法和空方法体不是同一个概念,例如public abstract void test();是一个抽象方法,它根本没有方法体,即方法定义后面没有一对花括号;但是public void test(){}方法是一个普通方法,它已经定义了方法体,只是方法体为空,因此这个方法不可使用abstract来修饰。


 并且当使用abstract修饰类时,表明这个类只能被继承;当使用abstract修饰方法时,表明这个方法只能被实现即重写。而final修饰的类不能被继承,修饰的方法不能被重写。因此final和abstract永远不能同时使用。

 并且当static修饰一个方法时,表明这个方法依托于类存在,通过类就可以访问到该方法,因此static不能和abstract同时存在。


 下面来看一个实例,理解一下上面所说的理论知识


 Shape抽象类

 

package com.test;
public abstract class Shape
{
	{
		System.out.println("执行Shape的初始化块...");
	}
	private String color="颜色";
	// 定义一个计算周长的抽象方法
	public abstract double calPerimeter();
	// 定义一个返回形状的抽象方法
	public abstract String getType();
	// 定义Shape的构造器,该构造器并不是用于创建Shape对象,
	// 而是用于被子类调用
	public Shape(){}
	public Shape(String color)
	{
		System.out.println("执行Shape的构造器...");
		this.color = color;
	}
	// 省略color的setter和getter方法
	public void setColor(String color)
	{
		this.color = color;
	}
	public String getColor()
	{
		return this.color;
	}
}

 Circle类

 

package com.test;
public class Circle extends Shape
{
	private double radius;
	public Circle(String color , double radius)
	{
		super(color);
		this.radius = radius;
	}
	public void setRadius(double radius)
	{
		this.radius = radius;
	}
	// 重写Shape类的的计算周长的抽象方法
	public double calPerimeter()
	{
		return 2 * Math.PI * radius;
	}
	// 重写Shape类的的返回形状的抽象方法
	public String getType()
	{
		return getColor() + "圆形";
	}
	public static void main(String[] args)
	{
		Shape s2 = new Circle("黄色" , 3);
		System.out.println(s2.getType());
		System.out.println(s2.calPerimeter());
	}
}

 


猜您喜欢

备案号:苏ICP备12016861号-4