“java抽象类”不能被实例化是什么意思?

Python015

“java抽象类”不能被实例化是什么意思?,第1张

Calendar c = new Calendar() 出现 new Calendar()就会执行实例化一个对象了。所以如果是抽象类就不能这样new的。要new 它没有abstract的子类。\x0d\x0a\x0d\x0a抽象类是指不允许被实例化的类;抽象方法是没有方法体的方法。\x0d\x0a1、抽象类可以不包括抽象方法,它反正不会去实例化,抽象类不能被实例化,也就是不能用new关键字去产生对象,抽象方法只需声明,而不需实现,抽象类的子类必须覆盖所有的抽象方法后才能被实例化,否则这个子类还是个抽象类,里面的方法是不是抽象的没有本质影响。\x0d\x0a2、但是含有抽象方法的类绝不能被实例化,否则执行这个方法的时候,怎么办?\x0d\x0a3、如果子类是非抽象的,那么它就必须实现父类中的抽象方法;否则,它继承来的抽象方法仍然没有方法体,也是个抽象方法,此时就与“含有抽象方法的类必须是抽象类”相矛盾了。\x0d\x0a\x0d\x0a抽象类与接口紧密相关,它们不能实例化,并且常常部分实现或根本不实现。抽象类和接口之间的一个主要差别是:类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承。从抽象类派生的类仍可实现接口。可以在创建组件时使用抽象类,因为它们使您得以在某些方法中指定不变级功能,但直到需要该类的特定实现之后才实现其他方法。抽象类也制定版本,因为如果在派生类中需要附加功能,则可以将其添加到基类而不中断代码。\x0d\x0a\x0d\x0a在实现抽象类时,必须实现该类中的每一个抽象方法,而每个已实现的方法必须和抽象类中指定的方法一样,接收相同数目和类型的参数,具有同样的返回值。\x0d\x0a

//抽象类!

 abstract class A

{

//方法1:抽象方法!

abstract void show()

//方法2:非抽象方法!

public void method()

{

}

}

/*

这是一个合法的抽象类,里面可以包含抽象方法和非抽象方法

假如都如同方法2,要是不能被实例化,还能找点借口和理由!

但是:

如果是方法1,怎么样?

那方法根本没有方法体..你说,就算能让你实例化,你的对象方法里面

会是什么?

这么说明白了吗?

所以就有了Java的规定,抽象类需要被继承以后才可以实例化!

其实如果抽象类里面是可以全部放法非抽象方法的,这也是一个结构..用静态来访问,具体用处

暂时我也还不知道,但是可以这么做!(这点说的是废话,额外小知识!)

*/

首先抽象类不能实例化是一个java的语法规范。

抽象类中是可以包含抽线方法,不是必须。如果一个抽象类没有一个抽象方法,那么他和一个普通java类就没有任何区别了,也就是说,在这种情况下又没有abstract修饰都是一样的。定义了一个包含抽象方法的抽象类,其子类在继承自该抽象类的时候,子类就必须实现父类的所有抽象方法。之所以在java变成中存在这样一个语法规范,就是为了定义这种类型结构来解决生活中这样的一些实际问题。

比如举一个简单例子:

父亲(抽象类)是一个残疾人,他一生都想着要去见义勇(父类的抽象方法)为帮助他人,但是由于自生残疾行动不便,然后他就要求其所有的儿子(继承自抽象类的子类)能实现他的这个愿望(继承父类的抽象方法)。然而每一个儿子在实现父亲想见义勇为这个愿望的时候,每个儿子的做法是不一样的。大儿子喜欢这种方式的见义勇为(子类一有其自己的实现方法),二儿子喜欢其他的见义勇为的方式(子类二有其自己的实现方法)....因此java的抽象类就是用在这种场景中,解决这种问题的。