java基础学习总结

抽象类 abstract
一个类不能够被实例化时,可以将这个类定义为抽象类。
特点:
抽象类不能够被实例化。
抽象类中的方法不一定都是抽象方法,也可以有正常的类方法。
含有抽象方法的类(不是接口),必须要申明为抽象类。
抽象方法不能用private修饰,应为抽象方法必须要由子类重写。
抽象类中可以有构造方法。
抽象方法必须为public或者protected
概念理解编辑
1.抽象类往往用来表示在问题领域进行分析、设计中得出的抽象概念,
是对一系列看上去不同,但是本质上相同的具体概念的抽象。
2.在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所
有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体
的对象,这样的类就是抽象类。 
3.比如,在一个图形编辑软件的分析设计过程中,就会发现问题领域存在着圆、三角
形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这
个概念在问题领域并不是直接存在的,它就是一个抽象概念。而正是因为抽象的概念在
问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。


抽象类也是类,是特殊的类,更多的是强调一种概念。不能被实例的概念,需要子类去具体化这个
概念,从而子类可以被实例化.


由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生子类,
也可扩展此模块的行为功能。为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle)
开闭原则(对修改关闭,对扩展开发),抽象类是其中的关键所在。



接口 interface 实现接口implements
当我们想强调一个功能,而不是类型时,可以通过定义接口的方式来实现
特性
接口中的类属性默认的缺失值有 public static final
所有方法都是public abstract修饰的


接口是引用类型的,和抽象类的相似之处有三点:
不能实例化;
包含未实现的方法声明;
派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员


抽象类与接口紧密相关。然而接口又比抽象类更抽象,这主要体现在它们的差别上:
1.类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口,
从而得出接口是用来解决多重继承问题的。
2.抽象类当中可以存在非抽象的方法,可接口不能,且它里面的方法只是一个声明必须用public来修饰没有具体实现的方法。
3.抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量(static final)。
4.抽象类是对象的抽象,然而接口是一种行为规范。




=====================================
抽象方法是必须实现的方法。就象动物都要呼吸。但是鱼用鳃呼吸,猪用肺呼吸。
动物类要有呼吸方法。怎么呼吸就是子类的事了。
现在有很多讨论和建议提倡用interface代替abstract类,两者从理论上可以做一般性的混用,但是在实际应用中,他们还是有一
定区别的。抽象类一般作为公共的父类为子类的扩展提供基础,这里的扩展包括了属性上和行为上的。而接口一般来说不考虑属性,
只考虑方法,使得子类可以自由的填补或者扩展接口所定义的方法,就像JAVA王子所说的事件中的适配器就是一个很好的应用。
用一个简单的例子,比如说一个教师,我们把它作为一个抽象类,有自己的属性,比如说年龄,教育程度,教师编号等等,而教师
也是分很多种类的,我们就可以继承教师类而扩展特有的种类属性,而普遍属性已经直接继承了下来。
而接口呢~还是拿教师做例子,教师的行为很多,除了和普通人相同的以外,还有职业相关的行为,比如改考卷,讲课等等,我们把
这些行为定义成无body的方法,作为一个集合,它是一个interface。而教师张三李四的各自行为特点又有不同,那么他们就可以扩
展自己的行为body。从这点意义上来说, interface偏重于行为。
总之,在许多情况下,接口确实可以代替抽象类,如果你不需要刻意表达属性上的继承的话。


一个类只可以继承一个父类,类是单继承,一个类可是实现多个接口,
接口可以继承接口
接口不可以实现接口


抽象类可继承抽象类,可实现接口
抽象类就是特殊的类


抽象类和接口的区别
1.语法层面上的区别
  1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;
  2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
  3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
  4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。
2.设计层面上的区别
1)抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,
包括属性、行为,但是接口却是对类局部(行为)进行抽象。举个简单的例子,飞机和鸟是不同类的事物,
但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计
为一个类Bird,但是不能将 飞行 这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽
象描述。此时可以将 飞行 设计为一个接口Fly,包含方法fly( ),然后Airplane和Bird分别根据自己的需要实
现Fly这个接口。然后至于有不同种类的飞机,比如战斗机、民用飞机等直接继承Airplane即可,对于鸟也
是类似的,不同种类的鸟直接继承Bird类即可。从这里可以看出,继承是一个 "是不是"的关系,而 接口 实
现则是 "有没有"的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没
有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不
能飞行就不实现这个接口。
2)设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。
什么是模板式设计?最简单例子,大家都用过ppt里面的模板,如果用模板A设计了ppt B和ppt C,ppt B和ppt C公共
的部分就是模板A了,如果它们的公共部分需要改动,则只需要改动模板A就可以了,不需要重新对ppt B和ppt C进行
改动。而辐射式设计,比如某个电梯都装了某种报警器,一旦要更新报警器,就必须全部更新。也就是说对于抽象类,
如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口
进行了变更,则所有实现这个接口的类都必须进行相应的改动。
=================================================


static
static修饰的方法叫静态方法
static修饰的数据叫静态数据
static可以修饰类,必须为静态内部类
目的
使该方法或数据独立于类的实例,使用类去访问,而不是类实例,
所以也叫全局方法和数据
使用规则 (独立与实例的,与实例相关的都不可访问)
可以调用其它静态方法
必须方法静态数据
不能使用super或this关键字


final
修饰类  不能被继承
修饰变量 不能被修改
修饰成员方法 不能被重写


修饰符
修饰类
public  可以跨包使用
缺省     只允许在包中使用
修饰成员(属性、方法、内部类(后面讲解))
public 该类非该类均可访问
protected 该类及其子类的成员可以访问,同一个包中的类可也访问
缺省 同一数据包中的类可以访问
private 只有该类可以访问




重载Overloaded的方法是可以改变返回值的类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值