第四章 面对对象的高级知识

1.继承性
子类被称为派生类,父类又被称为超类。
1)java不允许多重继承,但允许多层继承。(但一般不超过三层,太多了过于复杂)
2)子类在继承父类时严格来讲会继承全部的操作,但对于所有的私有操作属于隐式继承,而非私有操作属于显式继承。(对于从父类中继承的私有属性,子类不能够直接进行操作,而只能依靠setter和getter来进行操作)
3)子类对象在构造前一定会默认调用父类的构造函数(默认使用无参构造),以保证父类对象先实例化,子类对象后实例化。(利用super(空/参数/参数,参数)调用父类的构造函数,必须放在第一行,另外this()和super()是不能同时出现的,this是调用本类的方法或者参数,super是调用父类的方法或者参数,他们都必须放在第一行)

2.覆写
在继承的时候有可能出现定义的属性或者方法与父类同名的情况,这样的操作就叫覆写。(覆写方法时必须与父类的方法拥有相同的返回值类型、方法名、参数类型以及个数)
1)覆写方法的执行问题:观察实例是属于哪一个类,若这个实例的类里面已经覆写过这个方法,则会调用覆写过的,否则调用父类中的。
2)被子类覆写过的方法不能拥有比父类更严格的访问控制限制。(若父类中的方法采用的是私有限制,则子类是无法进行覆写的,因为子类根本看不到这个方法。)
3)super.方法() 为调用父类中的方法
4)覆写与重载相比,重载只要方法名相同就行,返回值类型是可以不同的。

3.final关键字
1)final定义的类不能再有子类(String就是一个final类)
2)使用final定义的方法不能再被子类所覆写。
3)使用final定义的变量就变成了常量。(所谓的全局常量就是用public static final定义的常量)

4.多态性
1)方法的多态性:重载和覆写 对象的多态性:向上转型(自动转换) 向下转型(强制转换,因为有强制性的操作,所以向下转型有前提条件,即必须发生了向上转型后才能发生向下转型)
2)对象的多态性有什么作用,其向上转型主要的意义在于参数的统一,向下转型主要是为了调用子类的个性化操作方法。
3)对象 instanceof 类 返回boolean值 用于判断是否是该类的实例

5.抽象类
抽象类就是在普通类之中加上抽象方法的类,抽象方法不具有方法体。但是方法必须具有abstract
声明,类前也必须加上abstract声明。
1)抽象类必须拥有子类,子类必须覆写抽象类的全部抽象方法,依靠向上转型实现抽象类的实例化。
2)虽然抽象类不能直接实例化对象,但是抽象类依然拥有构造函数,目的只是为了属性的初始化,实例化子类对象时依然会调用抽象类的构造函数。
3)抽象类不能用final进行定义。
4)抽象类中可以没有抽象方法,但只要是抽象类就不能用new来进行直接实例化对象。
5)抽象类中依然可以定义内部的抽象类,而实现的子类也可以选择是否定义内部类来继承抽象内部类。
6)外部抽象类不允许使用static声明,而内部抽象类允许使用static声明,使用static声明的内部抽象类就相当于是一个外部抽象类,继承的时候采用“外部类.内部类”形式来表示类名称。
7)在抽象类中,如果定义了static属性的属性或者方法,就可以在没有对象的时候直接调用。
8)隐藏抽象类的子类,一般会在本类中定义一个私有属性的子内部类,这样就可以实现隐藏子类的作用。

6.接口(接口的作用主要是为了解决单继承问题)
如果一个类只是由抽象方法和全局变量组成,那这种情况下就不会把它定义成抽象类,而将它定义成接口。(interface)
1)一个类可以实现多个接口,接口也是通过向上转型完成实例化操作。
2)在接口中很多时候会省略abstract和public static final,并且在方法上是否编写public都是一样的,因为在接口里面只能够使用一种权限-public。
3)若一个类同时实现了两个接口,则这个类的实例化对象可以通过向上转型实现接口实例,也可以通过将该实例向下转型实现另一个接口的实例化(也就是本来两个接口是没有关系的,但是通过共同的一个类来实现后,两个接口的实例可以实现相互的转换)。
4)一个抽象类可以继承一个抽象类和实现多个接口,而一个接口却不能继承抽象类,但可以使用extends继承多个接口。
5)接口本身是具有限制的,只能拥有全局变量和抽象方法。但是其内部类是没有限制的,内部类可以是普通内部类、抽象内部类、接口 。

7.工厂设计模式(Factory)
所谓的工厂设计模式就是为了减少代码间的耦合性,我们在用户和实例化对象之间加入一个Factory类用于专门操作类和对象,以减少客户端的耦合性,这样在修改时就不需要直接修改客户端,也就是说要向用户屏蔽创建和操作对象的过程。

8.代理设计模式(Proxy)
代理设计模式也就是在真实操作前加上一个代理类,代理类会实现真实操作类。在代理类中会完成许多的业务操作,包括身份验证、许可验证等等,验证完成后会调用真实的操作实现目的。

9.在使用抽象类和接口时,当目标是非具体事物时使用接口,具体到某个事物时采用抽象类。

10.Object类
1)Object类是所有类的父类,能够接收所有类的实例,此外还能接收其他引用数据类型的对象。
2)任意一个java类理论上都应该覆写Object类中的3个方法:toString()、equals()、hashCode()
toString()默认输出的是对象的编码,由于String类中覆写了toString()方法,所以它输出的是字符串。
默认的equals()是比较的两个对象的内存地址数值,String中也进行了覆写。
3)除了引用数据类型,其实Object对象也能够接收基本数据类型,在接收基本数据类型时它会完成自动装箱,也变成一个类的对象,进而可以被object接收。

11.匿名内部类
匿名内部类是没有名字的内部类,其必须在抽象类或接口基础上才能定义。
具体使用如下:new Message(){
public void print()
{…}
}//Message是一个接口,print是其中的一个抽象类,使用时直接进行实例化并实现抽象类。这样做就是避免一些只使用一次的类定义成一个具体的类。

12.基本数据类型的包装类
1)对于8中基本数据类型都有对应的包装类,这些包装类又可以进一步分为对象型包装类(Object的直接子类)(Character和Boolean)和数值型包装类(Number的直接子类)。
装箱操作:将基本数据类型变成包装类的对象(自动转换)
拆箱操作:将包装类的对象变成基本数据类型(强制转换),一般利用xxxValue()(例如intValue())来进行拆箱操作。
2)如果使用自动装箱来实例化对象,对象就会被保存到对象池中,就行String对象的实例化一样。
3)数据类型转换(字符串转换为对应的类型)
Integer类:public static int parseInt(String s)其他的也是这样的结构
有一个特殊的如Character,在String中提供了一个函数charAt()用于将字符串转化为字符。
4)基本数据类型转换为字符串
第一种方法就是在基本数据类型(引用数据类型先toString())后面加上一个“”空字符串,系统将自动进行转换。这样做的缺点是会产生空间垃圾。
第二种就是利用String中提供的public static String valueOf(数据类型变量)进行转换。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值