zoukankan      html  css  js  c++  java
  • 第八节 多态和Object类

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

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

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

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

    多态的体现:

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

     Student student = new StudentA();

    多态的强转:

    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{
    
    }
     
  • 相关阅读:
    Mac nginx 简单文件服务器
    cocos-lua
    Sublime Text 3 快捷键精华版
    VS中dumpbin工具的使用
    【2022新教程】Ubuntu server 20.04如何安装nvidia驱动和cuda-解决服务器ssh一段时间后连不上的问题
    linux如何将一个正在运行的进程转入到后台执行且中断shh连接不被kill掉
    Ubuntu如何修改默认python版本-sudo和不用sudopython不一致怎么办
    Ubuntu中virtual enviroment在sudo下无效怎么办?
    时间复杂度为O(1)的抽样算法——别名采样(alias sample method)
    Luke技术小站公告板
  • 原文地址:https://www.cnblogs.com/xiaoshuaidiboke/p/7147343.html
Copyright © 2011-2022 走看看