Homework:Java抽象类概念,抽象类为什么不能创建对象
抽象是什么?
1.抽象类的定义:
抽象就是从多个事物中奖共性的,本质的内容抽取出来。
通常在编译语句中⽤abstract修饰的类是抽象类,含有抽象⽅法的类称为抽象类,同样不能⽣成对象。
抽象类是不完整的,只能⽤作基类,在⾯向对象⽅法中,抽象类主要⽤来进⾏类型隐藏,和充当全局变量的⾓⾊。
2.抽象类的概念
多个对象都具备相同的功能,但是该功能的具体实现细节⼜各不相同。
那么我们对此相同功能进⾏抽取,只抽取功能定义,只有功能声明,这种⽅法称为抽象⽅法
例:
狗和猫均有 eat() 功能,但是具体吃的东西⼜不同,我们此时将 eat() 抽象出来
abstract class animals{
public abstract void eat();
}
class dog extends animals{
public void eat(){
System.out.println("狗吃⾻头");
}
}
class cat extends animals{
public void eat(){
System.out.println("猫吃鱼");
}
}
3. 抽象类的特点
1. 抽象⽅法只能定义在抽象类中,抽象的⽅法和抽象的类必须由关键字abstract修饰。
2. 抽象类之定义⽅法声明,不定义功能主题(⽅法内部的具体实现)
3. 抽象类不可以被创建对象(下⾯进⾏解释)
4. 抽象类只有⼦类继承了⽗类中的⽅法,并且对起哄的所有抽象⽅法进⾏重写,该⼦类才不是抽象类(若没有重写其当中的所有抽象⽅法,这个⼦类
还是抽象类)
为什么抽象类不能创建对象?
1. ⼦类更具体,⽗类更抽象,直接创建⽗类对对象本⾝没有意义
2. 如果创建的是⽗类对象在调⽤⽅法的时候,调⽤的⽗类中的⽅法,⽽并⾮⼦类的⽅法,他违背了多态的思想和设计
3. 因为⽗类引⽤指向⼦类对象时,调⽤的⽅法是⼦类重写的⽅法
⼀般⽗类中的描述不够具体
并不是说抽象类的构造⽅法没有意义
那么在创建⼦类对象时要先调⽤⽗类的⽅法
与具体的类⽐较:
1. 抽象类不能直接实例化,并且对抽象类使⽤new运算符会导致编译时错误。(虽然⼀些变量和值在编译时的类型可以是抽象的,但是其值必须为
null,或者含有对⾮抽象类的实例的引⽤)
2. 允许抽象类包含抽象成员
3. 抽象类不能被密封
与接⼝⽐较:
相同点:
不能实例化对象,包含未实现的⽅法声明、派⽣类必须实现未实现的⽅法,抽象类是抽象⽅法,接⼝则是所有成员(不仅仅是⽅法包括其他成员)
不同点:
1. 可以实现很多个接⼝,但只能继承⼀个抽象类(解决多重继承)
java接口有没有构造方法2. 抽象类当中可以存在⾮抽象的⽅法,可接⼝不能(它⾥⾯的⽅法只是⼀个声明,必须⽤public来修饰没有具体实现的⽅法)
3. 抽象类中的成员变量可以被不同的修饰符来修饰,可接⼝中的成员变量默认的都是静态常量。
4. 抽象类是对象的抽象,然⽽接⼝是⼀种⾏为规范。
5. 接⼝只能做⽅法声明,抽象类中可以作⽅法声明,也可以作⽅法实现。
6. 接⼝是设计的结果,抽象类是重构的结果
7. 抽象类和接⼝都是⽤来抽象具体对象的,但是接⼝的抽象级别较⾼
8. 抽象类主要⽤来抽象类别,接⼝主要⽤来抽象功能
简单来说,抽象类就是作为⽗类⽤来继承的,抽象类的抽象⽅法没有实现,就算创建了调⽤也没⽤,⽆法编译。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。