Java学习笔记一面向对象抽象类

抽象方法和抽象类必须使用abstract修饰符定义,有抽象方法的类只能被定义成抽象类,抽象类,抽象类里可以没有抽象方法。抽象方法不能有方法体,抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接口、枚举)5种成分。abstract不能用于修饰成员变量,不能用于修饰局部变量,即没有抽象变量、没有抽象成员变量等说法;abstract也不能用于修饰构造器,没有抽象构造器,抽象类里定义的构造器只能是普通构造器。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。含有抽象方法的类(包括直接定义了一个抽象方法;或继承一个抽象父类,但没有完全实现父类包含的抽象方法;或实现一个接口,但没有完全实现接口包含的抽象方法三种情况)只能被定义为抽象类。

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;
	}
}

当使用abstrat修饰类时,表明这个类只能被继承;当使用abstract修饰方法时,表明这个方法必须由子类提供实现。而final修饰的类不能被继承,final修饰的方法不能被重写。因此final和abstract永远不能同时使用。
当使用static修饰一个方法时,表明这个方法属于该类本身,即通过类就可调用该方法,但如果该方法被定义成抽象方法,则将导致通过该类来调用该方法时出现错误(调用一个没有方法体的方法肯定会引发错误)。因此static和abstract不能同时修饰某个方法,即没有所谓的类抽象方法。static和abstract并不是绝对互斥,static和abstract虽然不能同时修饰某个方法,但是可以同时修饰内部类(接口、枚举)。
abstract关键字修饰的方法必须被其子类重写才有意义,否则这个方法将永远不会有方法体,因此abstract方法不能定义为private访问权限,即private和abstract不能同时修饰方法。

发布了134 篇原创文章 · 获赞 141 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/asmartkiller/article/details/104868920