黑马程序员_多态

来源:互联网 发布:中国保险网络大学app 编辑:程序博客网 时间:2024/04/28 22:48

------- android培训、java培训、期待与您交流! ---------- 

 

多态

 多态的定义:

 某一类事物的多种存在形态。

 多态可能理解为事物的多种体现形态。

 

例如:

 动物:猫,狗。

人:男人,女人。

 

多态的学习从以下四点来入手:

1.多态的体现

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

2.多态的前提

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

3.多态的好处

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

4 多态的应用

 

class Fu
{
 static int num = 5;
 void method1()
 {
  System.out.println("fu method_1");
 }
 void method2()
 {
  System.out.println("fu method_2");
 }
 static void method4()
 {
  System.out.println("fu method_4");
 }
}


class Zi extends Fu
{
 static int num = 8;
 void method1()
 {
  System.out.println("zi method_1");
 }
 void method3()
 {
  System.out.println("zi method_3");
 }

 static void method4()
 {
  System.out.println("zi method_4");
 }
}
class  DuoTaiDemo4
{
 public static void main(String[] args)
 {
  
  Fu f = new Zi();

 System.out.println(f.num);

  Zi z = new Zi();
  System.out.println(z.num);

  f.method1();
  f.method2();
  f.method3();

  Fu f = new Zi();
  System.out.println(f.num);
  f.method4();

  Zi z = new Zi();
  z.method4();

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


在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。


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

Objcet类


Object:是所有对象的直接后者间接父类,传说中的上帝。
该类中定义的肯定是所有对象都具备的功能。

 

Object类中已经提供了对对象是否相同的比较方法。

如果自定义类中也有比较相同的功能,没有必要重新定义。
只要沿袭父类中的功能,建立自己特有比较内容即可。这就是覆盖。

class Demo //extends Object
{
 private int num;
 Demo(int num)
 {
  this.num = num;
 }
 
 public boolean equals(Object obj)//Object obj = new Demo();
 {

  if(!(obj instanceof Demo))
   return false;
  Demo d = (Demo)obj;

  return this.num == d.num;
 }
 
 
 public boolean compare(Demo d)
 {
  return this.num==d.num;
 }
 
 public String toString()
 {
  return "demo:"+num;
 }


}
class Person
{
}


class ObjectDemo
{
 public static void main(String[] args)
 {
  Demo d1 = new Demo(4);
  System.out.println(d1);//输出语句打印对象时,会自动调用对象的toString方法。打印对象的字符串表现形式。
  Demo d2 = new Demo(7);
  System.out.println(d2.toString());
  Demo d2 = new Demo(5);
  Class c = d1.getClass();

 System.out.println(c.getName());
 System.out.println(c.getName()+"@@"+Integer.toHexString(d1.hashCode()));
 System.out.println(d1.toString());
 Person p = new Person();
 System.out.println(d1.equals(p));

 }
}

 -------------- android培训java培训、期待与您交流! -----------------

 

原创粉丝点击