Object类、多态

来源:互联网 发布:2017手机号段数据库 编辑:程序博客网 时间:2024/05/24 07:30

1、Object 类

Object类是类层次结构的根类,每个类都使用Object类作为父类,所有对象(包括数组)都实现这个类的方法。

Object类中定义了很多方法,每个类既然是Object类的子类,那么每个类都继承了Object类中的方法。


例如,1、Object类中定义了一个equals()方法:

boolean equals.(Object obj) { 指示其它对象与此对象是否“相等” };返回值为布尔类型。


2、Object类中还有个 toString()方法:

String toString() { 返回该对象的字符串表示 };


3、Object类中还有个getClass() 方法:

Class getClass() { 返回Object的运行时类 };可理解为“反编译”过程,把对象转换成Class类。


4、而 Class 类中有个方法:

String getName() { 以String 的形式返回此Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。 }

代码示例:

class ObjectDemo {public static void main(String[] args){Demo d1 = new Demo();Demo d2 = new Demo();System.out.println(d1.equals(d2)); //判断d1和d2是不是一个对象System.out.println(d1.toString()); //把d1这个对象以字符串形式输出,“类名+@+对象哈希值”Class c = d1.getClass();           //把d1这个对象转成运行时类文件System.out.println(c.getName());   //输出这个类文件的文件名}}class Demo {   //extends Object,默认继承Object类}
编译运行结果:



2、多态

2.1 多态的定义

多态的思想可以理解为,一个事物的多种体现形态,就是多态

2.2 多态的体现

现实中的举例:动物这种事物,可以体现成多种形态,比如猫是一种动物,狗也是一种动物,而猫和狗就是动物的多种体现形态。
体现到代码中举例:父类引用指向子类对象,父类引用也可以接收自己的子类对象。
所谓父类引用指向子类对象,就是 new一个子类对象,但是命名的变量定义为父类的类型。
多态通常伴随着向上转型对象类型的强制转换。(参考继承的那篇博客)
多态代码示例:
class Animal {    public void eat(){        System.out.println("动物");    }    public void cc() {        System.out.println("CC");    }}class Cat extends Animal {    public void eat() {        System.out.println("吃鱼");    }    public void catchmouse() {        System.out.println("抓老鼠");    }}class Dog extends Animal {    public void eat() {        System.out.println("吃骨头");    }    public void kanjia() {        System.out.println("看家");    }}class DuoTaiDemo{    public static void main(String[] args){        Animal c = new Cat();       //父类引用指向子类对象,即多态        c.eat();        c.cc();    }}

编译运行结果:


2.3 多态的前提

必须是类与类之间有关系,要么继承,要么实现。
通常还有一个前提:存在方法覆盖,也叫重写。

2.4 多态的好处

多态的出现提高了程序的扩展性和后期可维护性。

2.5 多态的弊端

多态提高了程序的可扩展性,但是只能使用父类的引用访问父类中的成员
如果想要访问子类的特有方法或者属性,还要强制让父类引用向下转型。
所以多态的出现,一致都是子类在来回转换角色,
向上转型父类引用指向子类对象,或者向下转型,访问子类特有的内容

2.6 多态中成员的特点

(1)多态中成员函数的特点:
在编译时期:参考引用型变量所属的类中是否有调用的方法。如果有,编译通过;如果没有,编译失败。
在运行时期:参考对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态被调用时,编译看左边,运行看右边。
(2)多态中成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)
(3)多态中静态成员函数的特点:
无论编译和运行,都参考左边。
原创粉丝点击