您的位置:首页 > 其它

day09_抽象类

2015-09-17 23:21 225 查看
狗和老虎都是可以吼叫的,但是这两个之间是不可以互相继承的(你是说老虎继承狗还是老虎继承狗啊,因此不行,可以抽取出来具备两者都有的特征的:犬科动物,但是犬科动物没办法具体描述)。

描述一个事物,但是没有足够的信息,将这个事物称之为:抽象事物(换句话说就是不具体的);

具体事物:比如 你说苹果你就知道是啥,你说猫你就知道就是啥

  比如描述一下犬科动物是啥:能跑,有尾巴,会叫(我怎么猜得到这是什么动物啊)?描述一下水果:能吃,有味道(我去这个根本就猜不到你说的这个是啥啊)!
换句话说:狗和老虎都是会吼叫的,老虎和狗的吼叫是不一样的,吼叫这个动作是不一样的犬类动物不一样的实现方式(也就是叫的声音不一样呗)
犬科就是一个抽象,没足够的信息具体描述。
犬科动物这个事物是存在的,但是不具体,也有相应的属性和行为,但是行为不知道怎么做(比如你知道犬科动物怎么叫吗?不知道吧;或者说 你知道水果怎么剥开吗? 没告诉我哪一个,我怎么知道怎么剥开啊;你要是告诉我是柚子我还知道),由具体的表现形态来表现。
写一个方法只能有声明,而且方法的执行主体不明确;怎么叫,我不管,需要具体的方法执行主体;

犬科特点上面有吼叫,怎么叫不是我的事情,但是犬科都有吼叫功能,也就是功能声明;

因此没有具体的实现方法:也就是没有{}。只能是方法后面加;

这就是一个不具体的实现方法,也就是模糊的,也就是抽象的,前面加上关键字进行标识:abstract
有抽象方法的类:抽象类 也需要加 abstract 进行生命
抽象的事物的特点:  

  ——不用面对具体的事物,虽然不具体,可以简单化——去买点葡萄,橘子,橙子,香蕉神马的,,,(去买点水果!)
抽象方法一定定义在抽象类中的,都用abstract修饰
不能new 对象——就像剥水果一样,不知道具体的是 什么,怎么剥啊;代码解释:若是new 犬科动物() ,调用吼叫()方法 ,可是发现吼叫方法没有功能主体。
只有子类覆盖了所有的抽象方法后,子类具体化,子类就可以创建对象了 ;比如 class 狗 extends 犬科,表明是犬科的一种,具备吼叫的功能,可以具体实现吼叫的功能!
子类没有全部实现抽象类的方法,子类仍然是抽象类!

1 abstract class 犬科动物
 2 {
 3        abstract void  吼叫()

10 }




1. 为什么需要抽象类呢?换句话说就是抽象类存在的目的是为了什么,比如我要是想让一个动物叫的话,我一定有一个一个具体的动物了,那我就可以写成 new Dog().howl();了,为什么我还需要一个抽象的动物类呢?这是没有必要的啊!

2. 抽象类的具体的应用场景是什么呢?

3. 抽象类在工厂模式以及在和那个类型的向上转型,根据类名获得具体的类对象的时候,这样就可以直接用抽象类的方法了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: