java day09第九课 多态、Object类

多态和Object类

多态

定义:某一类事物的多种存在形态
例子:学生中有学生A和学生B
学生A这个对象对应的类型是学生A类型:StudentA studentA = new StudentA();
同时我们的学生A也是学生的一种,也可以把学生A称为学生。
Student student = new StudentA();
学生Student是学生A和其他学生事务中抽取出来的父类;父类的引用指向了子类对象。

1、多态的体现

父类的引用指向了自己的子类对象。
父类的引用也可以接收自己的子类对象。

2、多态的前提

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

3、多态的好处

多态的出现提高了程序的扩展性。

4、多态的弊端

只能使用父类的引用访问父类中的成员。

练习:通过练习体会多态
有动物Animal类,动物有猫、狗、猪,他们都有一个共同的特点吃东西,然后它们都有各自的特性;封装一个方法,调用与其对应的吃的方法。main方法中调用。

转型

Animal a = new Cat();//类型提升,也称为向上转型,把猫转换成动物类型
a.eat();
//如果想调用猫的特有方法?
//Cat c = new Cat();//此处new了一个新的猫,所以这不匹配;
//此时将父类的引用转成子类类型。
Cat c = (Cat)a;
//错误演示
/*
	Animal a = new Animal();
	Cat  c = (Cat)a; 
	不能把父类对象转换为子类类型。我们能转换的是父类应用指向了自己的子类对象时,该应用可以被提升,也可以被强制转换。多态自始至终都是子类对象做着变化。
	
	我们在判断此对象是不是某个类型的时候用关键字instanceof
*/

多态成员的特点

class Fu{
int num = 5;
	void run1(){
		System.out.println("Fu  run1");
	}
	
	void run2(){
		System.out.println("Fu  run2");
	}

}

class Zi extends Fu{
int num = 8;
	void run1(){
		System.out.println("Zi  run1");
	}
	void run3(){
		System.out.println("Zi  run3");
	}


}


class Test{
public static void main(String[] args){
	Zi zi = new Zi();
	zi.run1();
	zi.run2();
	zi.run3();
	zi.num;
	//打印结果?
	
	Fu zi = new Zi();
	zi.num;
	zi.run1();
	zi.run2();
	zi.run3();//报错,因为父类的对象里面没有run3()方法
	
}

}

多态成员函数的特点:在编译时期:参阅引用型变量所属的类中是否有调用的方法,如果有,编译通过,没有,编译失败。在运行时期:参阅对象所属的类中是否有调用的方法。
总结:成员函数在多态调用时,编译看左边,运行看右边。
在多态中,成员变量的特点:无论编译与运行,都参考的左边。

在多态中,静态成员函数的特点:
无论编译和运行,都参考左边。

Object

它是所有对象的间接父类;该类中定义的所有对象都具备的功能。
equals()方法:
java认为所有的对象都具备比较性,都能比较大小。

示例:

class Test{
public static void main(String[] args){
	
	Test t1 = new Test();
	Test t2 = new Test();
	System.out.println(t1.equals(t2));//其实equals就是用的我们==来比较的。
}
 
}

注意:我们在重写equals()方法的时候我们必须要先进行多态转型。

toString()方法:

class Test{
public static void main(String[] args){
	Demo d = new Demo();
	
	System.out.println(d.toString);//打印结果?
	System.out.println(Integer.toHexString(d.hashCode()))
	
	}
class Demo{

}
posted @ 2017-05-09 00:33  Mr、chen  阅读(205)  评论(0编辑  收藏  举报