Object类、多态

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)多态中静态成员函数的特点:
无论编译和运行,都参考左边。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值