Java类、继承、多态

来源:互联网 发布:软件招聘网 编辑:程序博客网 时间:2024/06/07 05:52

重点内容:动态绑定。多态。反射。

强制类型转换:

1、只能在继承层次内进行类型转换。

2、在将超类转换成子类之前,应该适用instanceof进行检查。


Java中最好将类中的域(实例变量)标记为private,而方法标记为public,任何声明为privated的内容对其他类都是不可见的。这对于子类来说也完全适用,即子类也不能访问超类的私有域。

Java中的protected属性的访问权限:Java中的受保护部分对于所有子类及同一个包下的所有其他类都可见。与C++的保护机制不同,Java中的protected的概念要比C++中的安全性差。


抽象类 abstract:

抽象类中的方法若定义为abstract时,此类为抽象类,切抽象方法不需要填写(为空),留给子类去实现。


仅对本类可见: private

对所有类可见: public

对本包和所有子类可见:protected

对本包可见: 默认 ,所谓默认是指没有标明任何修饰符的情况,这是一种不太受欢迎的形式。


Object类

在Java中,只有基本类型不是对象,例如:数值,字符和布尔类型的值都不是对象。所有的数组类型,不管是对象数组还是基本数据类型的数组都扩展与Object类。C++中没有根类。



Equals方法:

Object类中的equals方法用于检测一个对象是否等于另外一个对象。在Object类中,这个方法将判断两个对象是否具有相同的引用。如果两个对象具有相同的引用,它们一定是相等的。然而,对于大多数类来说,这种判断并没有什么意义。我们采用的equals的方法都是经过重写的equals方法。

String类重写了equals方法,只要字符串内容相等,就表示相等。

class Employee {    public boolean equals(Object otherObject){        if (this == otherObject) return true;        if(otherObject == null) return false;        if(otherObject == null) return false;        if(this.getClass() != otherObject.getClass()) return false;        Employee other = (Employee)otherObject;        return name.equals(other.name) && salary == other.salary ;    }}



String str1 = "Hello";String str2 = "Hello";//这是因为str1和str2确实指向同一个对象。String str3 = new String("Hello");        System.out.println(str1.equals(str2));//true        System.out.println(str1.equals(str3));//true System.out.println(str1 == str2);//true System.out.println(str1 == str3);//false

当一个方法调用完成之后,栈里面为它分配局部变量的所有空间消失:加深理解,当构造方法调用的时候,传递参数给成员变量的时候,分配完成后,栈中的局部变量消失。

形参和局部变量一样对待,当方法执行完成之后,局部变量和形参都消失,但是形参或者局部变量所引用的对象不一定立即消失,可能在GC工作的时候处理完成。
原创粉丝点击