JAVA_SE基础——43.抽象类
来源:互联网 发布:富途网络怎么样 编辑:程序博客网 时间:2024/04/29 13:15
高手勿喷~
抽象类:当定义一个类时,常常需要定义一些方法来描述该类的行为特征,但有时这些方法的实现方式是无法确定的。例如定义Animal类时,shout()方法用于表示动物的叫声,但是针对不同的动物,叫声也是不同的,因此在shout()方法中无法准确描述动物的叫声。
针对上面的情况,Java允许在定义方法时不写方法体,不包含方法体的方法为抽象方法,抽象方法必须使用abstract关键字来修饰,格式如下:
abstract void shout(); //定义抽象方法shout()
抽象类的应用场景:
我们在描述一类事物的时候,发现该种事物确实存在着某种行为,
但是这种行为目前是不具体的,那么我们可以抽取这种行为 的声明,但是
不去实现该种行为,这时候这种行为我们称作为抽象的行为,我们就需要使用抽象类。
抽象类的好处: 强制要求子类一定要实现指定的方法。
抽象类要注意的细节:
1. 如果一个函数没有方法体,那么该函数必须要使用abstract修饰,把该函数修饰成抽象 的函数。。
2. 如果一个类出现了抽象的函数,那么该类也必须 使用abstract修饰。
3. 如果一个非抽象类继承了抽象类,那么必须要把抽象类的所有抽象方法全部实现。
4. 抽象类可以存在非抽象方法,也可以存在抽象的方法.
5. 抽象类可以不存在抽象方法的。
6. 抽象类是不能创建对象的。
疑问:为什么抽象类不能创建对象呢?
因为抽象类是存在抽象方法的,如果能让抽象类创建对象的话,那么使用抽象的对象
调用抽象方法是没有任何意义的。
7. 抽象类是存在构造函数的,其构造函数是提供给子类创建对象的时候初始化父类的属性的。
abstract不能与以下关键字共同修饰一个方法:
1. abstract不能与private共同修饰一个方法。
2. abstract 不能与static共同修饰一个方法。
3. abstract 不能与final共同修饰一个方法。
白话解释:说到明就是不具体的总类写成抽象类就可以了,例如有个动物园,里面有着各种各样的动物,有狗,有猫等等,,,你能让它们叫吗?它们的叫声一样吗?怎么具体让什么动物叫?
这时,就应该想到abstract关键字,用来定义抽象类。。见实例1
实例1
//定义抽象类Zooabstract Zoo{//定义抽象方法shout()abstract void shout();}
在定义抽象类的时候要注意,包含抽象方法的类必须声明为抽象类,但是抽象类可以不包含任何抽象方法,只需使用abstract关键字即可。。 最值得注意的是:抽象类不可以被实例化的,因为抽象类中有可能包含抽象方法,抽象方法时没有方法体的,不可以被调用。如果真的想调用抽象类定义的方法,则需要创建一个子类,在子类中将抽象类中的抽象方法进行实现。 见实例2
实例2
//定义抽象类Zooabstract class Zoo{//定义抽象方法shout()abstract void shout();}//定义Dog类继承抽象类Zooclass Dog extends Zoo{String name = "狗" ; //实现抽象方法shout()public void shout(){System.out.println(name+"的叫声:汪汪汪~~~");}}//定义Cat类继承抽象类Zooclass Cat extends Zoo{String name = "猫" ; //实现抽象方法shout()public void shout(){System.out.println(name+"的叫声:喵喵喵~~~");}}//定义测试类class Demo1 {public static void main(String[] args) {System.out.println("welcome to Zoo"); //创建Dog类的实例对象Dog dog = new Dog();//调用dog对象的shout()方法dog.shout();//创建Cat类的实例对象Cat cat = new Cat();//调用cat对象的shout()方法cat.shout();}}运行结果:
从运行结果可以看出,子类实现了父类的抽线方法后,可以正常进行实例化,并通过实例化对象调用方法。。
交流学习企鹅:654249738
- JAVA_SE基础——43.抽象类
- JAVA_SE基础——44.抽象类的练习
- JAVA_SE基础——67.System类
- JAVA_SE基础——69.Date类
- JAVA_SE基础——68.RunTime类
- JAVA_SE基础——70.Math类
- JAVA_SE基础——23.类的定义
- JAVA_SE基础——55.自定义异常类
- JAVA_SE基础——62.String类的构造方法
- JAVA_SE基础——63.String类的常用方法
- JAVA_SE基础——64.StringBuffer类 ①
- JAVA_SE基础——65.StringBuffer类 ②
- JAVA_SE基础——66.StringBuffer类 ③
- JAVA_SE基础——6.标识符&关键字
- JAVA_SE基础——7.常量&变量
- JAVA_SE基础——8.基本数据类型
- JAVA_SE基础——15.循环嵌套
- JAVA_SE基础——16.方法
- 专访范钢:重构不是阳春白雪的高端玩意,而是码农编程利器(转)
- 视频录制常用参数
- linux 程序开发打印 debug()
- 使用代理同步Chromium代码的心得
- 欢迎使用CSDN-markdown编辑器
- JAVA_SE基础——43.抽象类
- 从C++prime的习题开始做起
- 修改时区
- java经典面试题整理
- Java基础知识总结
- 【置顶] signal信号捕捉
- 在ViewPager上方设置滑动条
- intellij下的junit的使用--新手详细教程
- 10.12做题——NOI题库(1.13.T30)1的个数