Java中的抽象类

1.1 概述

抽象类是用来捕捉子类的通用特性的,父类中的方法可以看做是模板方法,被多个子类重写,子类根据自己的需求重写这个模板方法,所以父类的方法主体就没有存在的意义了,我们把使用abstract关键字修饰没有方法主体的方法称为抽象方法。Java语法规定,包含抽象方法的类就是抽象类。

1.2 abstract使用格式

抽象方法

使用 abstract 关键字修饰方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体。
定义格式:

//修饰符 abstract 返回值类型 方法名 (参数列表);
public abstract void method();
抽象类

如果一个类包含抽象方法,那么该类一定是是抽象类(反之不一定成立)。
定义格式:

//abstract class 类名
public abstract class Animal {
	public abstract void run();
}

1.3 抽象类和抽象方法的使用

继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。所有不是抽象类的子类必须实现该父类的所有抽象方法,否则父类定义的抽象方法无法被使用,就失去了抽象方法的意义。

/**
 * 父类,同时也是个抽象类
 */
public abstract class  Animal {
	public abstract void run();
}
/**
 * 子类
 */
public class Dog extends Animal{
	/**
	 * 子类重写父类的抽象方法
	 */
	@Override
	public void run() {
		System.out.println("我是一只小狗,喜欢被溜");
	}	
}
/**
 * 测试类
 */
public class Test {
	public static void main(String[] args) {
		Dog dog = new Dog();
		dog.run();
	}	
}
// 输出结果: 我是一只小狗,喜欢被溜

1.4 注意事项

  1. 抽象类不能创建对象,只能由子类继承并且重写父类所有的抽象方法来使用,否则,编译无法通过而报错。除非该子类也是抽象类。
  2. 抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用。
  3. 抽象类中,可以定义普通的成员变量和成员方法,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

1.5 扩展 abstract 不能与哪些关键字连用

  1. private
    因为抽象方法设计的意义就是需要子类重写其抽象方法,private修饰的方法子类继承不到,更不能重写。
  2. final
    final关键字修饰的方法不能被重写。
  3. static
    抽象方法没有方法体,静态方法需要在类初始化的时候分配内存空间,还有静态方法可以直接类名.调用,抽象方法没有方法体没有意义。
  4. synchronize
    使用synchronize关键字需要具体的同步实现的,抽象方法没有方法体,冲突。
  5. native
    native 生命的方法是移交本地操作系统实现的,抽象方法是需要子类继承抽象方法并实现的,所以冲突。

总结

抽象类与普通类的区别只有不能创建对象、可以存在抽象方法两种区别,如果想使用抽象类,必须要由子类继承并且重写父类的所有抽象方法,如果子类也是也是个抽象类则不用重写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值