(5)面向对象(中)

Java的访问控制修饰符及其访问权限,分别写程序验证。

Java中的访问控制修饰符有public、protected、default、private。访问权限:public : 对所有类可见,使用对象:类、接口、变量以及方法;protected : 对同一包内的类和所有子类可见,使用对象:变量、方法, 注意:不能修饰类(外部类);default : 在同一包内可见,不使用任何修饰符,使用对象:类、接口、变量、方法;private : 在同一类内可见,使用对象:变量、方法,注意:不能修饰类(外部类)。

public访问权限程序验证:

protected访问权限程序验证:

上述四个程序Person作如下修改,其余不变。

同样测试protected权限问题,Person、People、Student能编译通过,说明用protected修饰的类在本类、同包、子类中互相访问都是可以的,而Computer编译不通过说明protected不可以在包外没有继承关系的类中互相访问。

default访问权限程序验证:

上述四个程序Person作如下修改,其余不变。

同样测试default权限问题,Person、People能编译通过,说明用default修饰的类在本类、同包中互相访问都是可以的,而Student、Computer编译不通过说明default不可以在包外不管有没有继承关系的类都不可以互相访问。

private访问权限程序验证:

上述四个程序Person作如下修改,其余不变。

同样测试private权限问题,Person能编译通过而People、Student、Computer编译不通过,就说明用private修饰的类只能在本类中访问。

子类对于从父类继承的可见性与方法,分别写程序验证。

子类继承了父类的所有属性和方法, 但只有public、protected的属性和方法在子类是可见的。

程序验证:

 

组合的概念和作用,举例说明。

概念:组合是通过对现有的对象进行拼装(组合)产生新的、更复杂的功能。作用:实现代码的复用,减少程序的冗余。在新类中简单创建原有类的对象,即一个类的对象是另外一个类中的成员。其操作方法是将已经存在类的对象放到新类中即可。

例:厨房(Kitchen)中有炉子(cooker)和冰箱(refrigerator)。

class Cooker{//类的语句}

class Refrigerator{//类的语句}

class Kitchen{
Cooker myCooker;

Refrigerator myRefrigerator;

}

重载的概念和作用,构造各种重载示例。

概念:一个类中如果含两个以上同名的方法,并且满足方法之间的参数组合必须不同(参数的数目不同或者参数的类型不同),他们之间就构成重载。(注意:方法的返回值不能作为判断方法之间是否构成重载的依据)。作用:大大简化了类调用者的代码,使得类有一种自动化调用的功能,而没有增加类创建的代码。

覆写的概念,作用和条件,举例说明。

概念:当子类定义了和父类在方法名称、返回值类型、参数类型及个数完全相同的方法的时候,称为方法的覆写。作用:父类中定义的方法名称是其他程序认可的,但是子类使用时发现,原有方法不能满足现在的操作要求,但要保留原方法名称,因此出现了覆写的概念;this方法与super方法的区别:this.方法():先找本类中是否有指定的方法,若没有,则使用父类继承的方法;super.方法():不查找本类的方法,直接找父类的方法。条件:被覆写的方法不能有比父类更严格的访问控制全权限。对于访问控制权限,严格来讲一共有四个,目前我们接触有3个,private  <  default < public,即若父类中的方法使用了public访问权限声明,子类只能使用public,若父类使用的是default,子类只能使用default或public。

作业:

1.面向对象的主要特征是封装、继承和多态。

2.封装是通过访问控制符实现的。

3.对象之间互相拥有对方的引用,通过引用调用其他类的方法从而相互作用。

4.父类的protected成员是包内可见的,并且对子类可见;若子类与父类不在同一包中,那么在子类中,子类实例可以访问其从父类继承而来的protected方法,而不能访问父类实例的protected方法。

5.Object中含有:

registerNatives():注册native方法(本地方法,由JVM实现,底层是由C/C++实现的)。

getClass():public方法,类加载的第一阶段类的加载就是将.class文件加载到内存,并生成一个java.lang.Class对象的过程,getClass()方法就是获取这个对象,这是当前类的对象在运行时类的所有信息的集合。

hashCode():public方法,调用此方法返回当前对象的hashCode值。

equals():public方法,用于比较当前对象与目标对象是否相等,默认是比较引用是否指向同一对象。

clone():返回当前对象的一个副本,super.clone()方法对成员变量如果是引用类型,进行的是浅拷贝(拷贝的是引用)。

toString():public方法,返回当前对象的字符串表示,可以将其打印方便查看对象的信息,方便记录日志信息提供调试。

notify()、notifyAll():如果当前线程获得了当前对象锁,调用wait方法,将锁释放并阻塞,这时另一个线程获取到了此对象锁,并调用此对象的notify()/notifyAll()方法将之前的线程唤醒。

wait(long)、wait(long,int)、wait():这三个方法是用来线程间通信用的,作用是阻塞当前线程,等待其他线程调用notify()/notifyAll()方法将其唤醒。这些方法都是public final的,不可被重写。

finalize():此方法是在垃圾回收之前,JVM会调用此方法来清理资源。此方法可能会将对象重新置为可达状态,导致JVM无法进行垃圾回收。

6.重载的方法之间的关系:功能类似,方法名相同,参数不同。

7.子类覆盖父类方法所需条件:父类中的方法必须在子类中可见,即子类继承了发类中的该方法;子类和父类的方法必须是实例方法;子类和父类必须要具有相同的函数名称、参数列表,并且子类的返回值与父类相同或者父类返回类型的子类型;子类方法的访问权限不能小于父类方法的访问权限;子类方法不能比父类方法抛出更多的编译时异常。子类中定义与父类同名的方法不一定是覆盖,覆盖对参数列表和返回值也有相应的条件。

8.封装的设计用途:利用抽象数据类型(类)将数据和基于数据的操作绑定在一起,数据被保存在抽象数据类型内部,系统只有通过被授权的操作方法才能够访问数据。使内部结构具有“高内聚,低耦合”的特点;继承的设计用途:继承是面向对象程序设计中对功能复用的重要手段。面向对象应用程序经常以框架和中间件为基础进行设计,应用程序代码和框架代码、中间件代码能够进行融合的主要方式就是采用继承,也就是应用代码中的类继承框架或中间件指定的类,便拥有了框架或中间件的所有功能;多态的设计用途:面向对象程序设计过程中,对于能进行消息处理的接口方法,有时既需要对其功能进行复用,同时又需要对其进行扩充(补充新的参数),重载正好能满足这种要求,因为旧的接口方法得以保留以保障原先使用程序的稳定,同时又可增加带参数的新的重载方法以满足扩充需求,并且新增加的重载方法与原先旧方法之间存在功能复用关系;而方法覆盖与引用替换结合,可使抽象类的声明在保证消息发送统一性的前提下,具有消息结果执行上的相异性特点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值