您的位置:首页 > 移动开发 > Objective-C

Java 继承 Object包含服务

2014-04-17 20:12 357 查看

Java所有继承均为公有继承(c++有私有继承和保护继承)

子类功能更加丰富,父类方法不适用时需要覆写改方法(super.getSalary+...)

super不是对象的引用,只是一个指示编译器调用父类方法的特有关键字(c++中采用父类::方法名调用父类方法)

super(n,s...)调用父类的构造函数

Manager向上转型为Employee时,调用覆写方法时,虚拟机能够识别具体引用对象类型,调用覆写后的方法(重点)即对象多态性

上转的对象只能调用父类中已有的方法(或者是之类覆写的方法)从子类到父类中查找改方法




Java不支持多继承,可实现多接口

不能将超类的引用赋给子类(不是每个员工都是经理)

动态绑定(对象方法执行过程)方法名字和列表成为方法的签名

1)获取所有候选方法

2)重载解析

3)private,static,final方法实现动态绑定

4)需找合适的方法(具体见上对象多态性)

虚拟机为每个类创建一个方法表,便于查找,节省搜索时间,子类方法不能低于父类方法的可见性

阻止继承:

final类 final class...(Sting类)

final声明的方法不允许覆盖

c++和c#方法都默认不具有多态性(内联处理,频繁调用)

强制类型转换:

(int)x

向下转型之前需要判断是否能够成功转换

if(staff[1] instanceOf Manager){

boss=(Manager)staff[1];

}

protected方法只对子类和同一包中的其他类可见

默认——只对本包可见

object类:所有类的超类,可引用任何类型对象

Object提供的服务:

equal()方法:两个对象状态相等,则这两个对象就相等(getclass()返回对象所属的类或者对象instanceOf...(对象是类或其子类的实例))

相等测试与继承:

自反性,对称性,传递性,一致性

1)if(this==otherObject) return true;

2) if(otherObject==null) return false;

3) if(getClass!=otherObject.getClass()) return false;后者if(!(otherObject instanceOf ClassName)) return false;

4)进行域的比较:return field1==other.field1&&field2==.....

hashcode();计算散列码,每个对象默认散列码为其存储地址(散列码是由其内容导出的)若重新定义equals()方法,则必须定义hashcode()方法,返回一整数值,且需要和equals定义保持一致。

toString()方法:当把一个对象与一个字符串用+连接起来时,Java编译会自动调用toString()方法

参数数量可变的方法:(...相当于[]数组的意思)

public static double max(double... values){

for(double v:values){}

}

枚举:

所有枚举类型都是Enum类的子类

static Enum valueOf(Class enumClass,String name);
toString();
返回枚举常量名
int ordinal()
返回枚举常量位置,从零开始

反射:

使用对象主要是工具构造者

继承设计的技巧:

1)将公共操作和域放在超类
2)不要使用受保护的域
3)使用继承实现is-a关系
4)所有继承方法都有意义时才使用继承
5)覆盖方法时,不要改变预期的行为
6)使用多态,而非类型信息
反射对系统程序及其有用,不适用于应用程序

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: