首页 > 代码库 > 第八节 多态和Object类

第八节 多态和Object类

多态的定义:某一类事物的多种存在形态

例子:学生类:包含学生A和学生B

      学生A对象对应的类型是学生A类型:StudentA studentA = new StudentA;

      Student student = new StudentA();学生Student是学生A和其他学生事务中抽取出来的父类;父类的引用指向了子类对象。

 

多态的体现:

父类的引用指向了自己的子类对象。  

 Student student = new StudentA();

多态的强转:

<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 22.0px Monaco; color: #4e9072 } span.s1 { color: #000000 } span.Apple-tab-span { white-space: pre }</style>

Animal c = new Cat();   //子类转化为父类  向上转型

 

Cat cat1 = (Cat)c; // 向下转型 Animal 强转成Cat类型 //父类强转成子类:Animal类型c 强转成了 Cat类型c

多态的特点:

A. 在多态中成员函数的特点:
 在编译时期:参阅引用性变量所属的类中是否有调用的方法。如果有,编译通过;
  在运行时期:参阅对象所属的类中是否有调用的方法。

  简单的总结就是:成员函数在多态调用时,编译看左边,运行看右边。

B. 在多态中,成员变量的特点:

无论编译和运行,都参考左边(引用型变量所属的类)

 C. 在多态中,静态(static)函数的特点:

无论编译和运行,都参考左边。

例如下面的代码:

 

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
class Fu{
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{
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");
}
}
public class DuoTaiDemo_1 {
public static void main(String[] args){
Fu f=new Zi();
f.method1();
f.method2();
//f.method3();
System.out.println(f.num);
Zi z=new Zi();
System.out.println(z.num);
 
f.method4();
z.method4();
 
}
 
}
 

如果由f.method3();  那么编译不会通过,因为在Fu类中没有这个方法。

num作为成员变量,无论编译和运行,都参考左边,也就是引用型变量所属的类,第一个是父类(Fu)中的num,第二个是子类(Zi)中的num。

Method4作为静态(static)函数,无论编译和运行,都参考左边。

最后程序的运行结果是:

  1. Zi Method_1  
  2.  Fu Method_2  
  3. 5  
  4. 8  
 
  1. Fu Method_4  
  2. Zi Method_4  

 

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{

}

 

 
 

 

第八节 多态和Object类