① 一个抽象类中只有抽象属性,没有抽象方法可以吗
抽象类可以没有抽象方法,但是如果你的一个类已经声明成了抽象类,即使这个类中没有抽象方法,它也不能再实例化,即不能直接构造一个该类的对象。
如果一个类中有了一个抽象方法,那么这个类必须声明为抽象类,否则编译通不过。
② 抽象类注意事项有哪些
1. 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。
理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。
2. 抽象类中,可以有构造器,是供子类创建对象时,初始化父类成员使用的。
理解:子类的构造方法中,有默认的super(),需要访问父类构造方法。
3. 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
理解:未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设计。
4. 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则子类也必须定义成抽象类,编译无法通过而报错。
理解:假设不重写所有抽象方法,则类中可能包含抽象方法。那么创建对象后,调用抽象的方法,没有意义。
5. 抽象类存在的意义是为了被子类继承,抽象类体现的是模板思想。
理解:抽象类中已经实现的是模板中确定的成员,抽象类不确定如何实现的定义成抽象方法,交给具体的子类去实现。我之前在黑马程序员学java,现在已经工作了,感觉老师讲的很好的。
③ 什么是抽象类
抽象类就是抽象类呗,里面有抽象的方法,可以被继承,继承类要实现抽象类的抽象方法,你可以也把它看作特殊的接口。当然抽象类也是实现多态好东西,一般项目里的基类都是抽象类,等你写项目以后就能慢慢明白抽象类的好处了,学习的时候知道有这个东西能写出来就行。
④ 什么是抽象类和抽象方法
抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类。抽象类有点类似“模板”的作用,目的是根据其格式来创建和修改新的类。对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象。当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract。
在抽象类中的成员方法可以包括一般方法和抽象方法。抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是abstract的,而这个子类也必须是抽象的,即声明为abstract。
抽象类中不一定包含抽象方法,但是包含抽象方法的类一定要被声明为抽象类。抽象类本身不具备实际的功能,只能用于派生其子类。抽象类中可以包含构造方法,但是构造方法不能被声明为抽象。
抽象类不能用final来修饰,即一个类不能既是最终类又是抽象类。
abstract不能与private、static、final、native并列修饰同一个方法。
程序举例:abstract
class
Animal
//定义抽象类
abstract
void
eat();
//定义抽象方法}class
Horse
extends
Animal
//定义继承Animal的子类
void
eat()
//重写父类的抽象方法
}class
Dog
extends
Animal
void
eat()
}class
test}运行结果:
马吃草料!
狗吃骨头!
如果帮助到您,请记得采纳为满意答案哈,谢谢!祝您生活愉快!
vae.la
⑤ C++关于抽象类的问题 编译的时候总是显示错误,又不懂改,,,求救
virtual float area()=0;的意思就是说,继承类必须将float area() 进行覆盖,否则无法创建对象
你的代码来看,就是把get_area和get_vol的get_去掉,或者在base里,将这个前缀加上
⑥ 抽象类的特点是什么
1、抽象类不能实例化。
2、抽象类可以包含抽象方法和抽象访问器。
3、不能用 sealed 修饰符修饰抽象类,因为这两个修饰符的含义是相反的。 采用 sealed 修饰符的类无法继承,而 abstract 修饰符要求对类进行继承。
4、从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实际实现。
(6)抽象类能否编译扩展阅读
抽象类与其他类的比较
一、与具体类比较
1、抽象类不能直接实例化,并且对抽象类使用 new 运算符会导致编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。
2、允许(但不要求)抽象类包含抽象成员。
3、抽象类不能被密封。
二、与接口比较
抽象类表示该类中可能已经有一些方法的具体定义,但是接口就仅仅只能定义各个方法的界面(方法名,参数列表,返回类型),并不关心具体细节。
参考资料来源:网络-抽象类
⑦ java抽象类编译后能不能生成*.class,若生成,文件名叫什么
每个class编译后都会生成一个class文件。抽象类如果是顶层类那么文件名就是类名.class,如果是内部类那么文件名就是外部类名$类名.class。
⑧ 在java当中new一个抽象方法可以编译通过吗
抽象类如果new了就不叫抽象类了。
理解抽象类
abstract class和interface在Java语言中都是用来进行抽象类(本文 中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法, 请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢?
在 面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是 所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、 设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、 三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念 在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。
在面向对象领域,抽象类主要用来进行类型隐藏。 我们可以构造出一个固定的一组行为的抽象描 述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个 抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。熟悉OCP的读者一定知 道,为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle),抽象类是其中的关键所在。
⑨ C#中关于抽象类的问题。
投象类是不可以实例化的。这里所谓类实例化指的就是类在生成过程中调用了类的构造函数,则称该类为实例化。而抽象类没有构造函数,所以是无法实例化的。
在C#编译器环境下,具体类即使不写构造函数,编译系统也会自动增加默认的实例函数,以便实例化,但是对于声明为abstract的类,术语称“抽象类”或“泛类” ,系统不会默认为其生成构造函数,而且编译系统在编译时,遇过声明为abstract类时,如有构造函数则会抛出错误!
Animal[] animalarray;
Aninal[] animalarray = new Animal[2];
这种情况下均没有调用Animal的构造函数,因而不是对抽象类的实例化,而是对数组的实例化。
Animal animal;
这句也只是声明了一个变量,也不没有对抽象类进行实例化,因而也是正确的。
Animal animal = new Animal();
这是试图对一个抽象类实例化,因Animal抽象类没有构造函数,会造成实例化的失败!所以这是不允许的!
Animal animal = new Cat();
Cat是一个Animal的子类(派生类),因有相应的构造函数的话,是允许的。允许父类(基类)指示子类(派生类)这种调用规则其实就是我们常说的里氏原则。它并没有对抽象类进行任何的实例化的。