博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java abstract修饰符
阅读量:4143 次
发布时间:2019-05-25

本文共 1142 字,大约阅读时间需要 3 分钟。

abstract修饰符

  • 用abstract修饰的类叫做抽象类,抽象类不能被实例化
  • 用abstract修饰的方法叫做抽象方法,抽象方法没有方法体

抽象类的规则:

1、抽象类可以没有抽象方法,但有抽象方法的类必须是抽象类;
2、抽象类的子类没有重写实现父类的所有抽象方法(当然可以实现为空,即方法体为空),则子类必须被定义为抽象类;

abstract class Base{	abstract void method1();	abstract void method2();}class Sub extends Base{		//编译出错,Sub类没有实现父类的所有抽象方法,必须被定义为抽象类	void method1(){		System.out.println("method1");	}}

3、抽象类可以有构造方法,但不能是抽象构造方法;

abstract class Base{	abstract void Base();	//编译出错,构造方法不能是抽象的}

4、抽象类可以有静态方法,但是没有静态抽象方法;

abstract class Base{	abstract void Base();	//编译出错,构造方法不能是抽象的	static abstract void method1();  //编译出错,不能有抽象静态方法	static void method2();  //可以有静态方法}

5、抽象类和抽象方法不能被final修饰符修饰,因为抽象方法必须有子类实现,而final不允许有子类,不能被子类方法覆盖;abstract 与 final不能连用

为什么抽象类不允许被实例化?

1、在语义上

抽象类表示从一些具体类中抽象出来的类型,例如苹果类,香蕉类是具体类,水果类是抽象类。自然界并不存在水果类本身的实例。
苹果对象是水果对象,香蕉对象也是水果对象。
  • 当父类是具体类时,父类的对象包括父类本身的对象和所有子类的具体对象;
  • 当父类是抽象类时,父类的对象包括所有具体子类的对象;
因此,所谓的不能被实例化,是指不能创建抽象类本身的实例

2、在语法上

假如可以创建抽象类本身的实例,因为method2() 方法是抽象方法,没有方法体,所有无法执行。因此,java编译器不允许创建抽象类的实例。
abstract class Base{	public void method1(){	//普通方法	 }  	public abstract void method2();  //抽象方法}Bsse base = new Base();//假使java编译器没报错base.method1();base.method2();//运行时java虚拟机无法执行这个方法

转载地址:http://uhbti.baihongyu.com/

你可能感兴趣的文章
无protobuf协议情况下的反序列化------貌似无解, 其实有解!
查看>>
make -n(仅列出命令, 但不会执行)用于调试makefile
查看>>
makefile中“-“符号的使用
查看>>
go语言如何从终端逐行读取数据?------用bufio包
查看>>
go的值类型和引用类型------重要的概念
查看>>
求二叉树中结点的最大值(所有结点的值都是正整数)
查看>>
用go的flag包来解析命令行参数
查看>>
来玩下go的http get
查看>>
感受一下go协程goroutine------协程在手,说go就go
查看>>
队列和栈的本质区别
查看>>
matlab中inline的用法
查看>>
如何用matlab求函数的最值?
查看>>
Git从入门到放弃
查看>>
java8采用stream对集合的常用操作
查看>>
EasySwift/YXJOnePixelLine 极其方便的画出真正的一个像素的线
查看>>
Ubuntu系统上安装Nginx服务器的简单方法
查看>>
Ubuntu Linux系统下apt-get命令详解
查看>>
ubuntu 16.04 下重置 MySQL 5.7 的密码(忘记密码)
查看>>
Ubuntu Navicat for MySQL安装以及破解方案
查看>>
HTTPS那些事 用java实现HTTPS工作原理
查看>>