zoukankan      html  css  js  c++  java
  • 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{
    
    }
  • 相关阅读:
    李宏毅 Keras手写数字集识别(优化篇)
    李宏毅 Keras2.0演示
    李宏毅 线性回归预测PM2.5
    李宏毅 Gradient Descent Demo 代码讲解
    Pandas导入导出&pickle文件模块
    python(29)Tinker+BeautifulSoup+Request抓取美女壁纸
    golang(11) 反射用法详解
    golang(10)interface应用和复习
    golang(09) golang 接口内部实现
    golang(08)接口介绍
  • 原文地址:https://www.cnblogs.com/chendujie/p/6828649.html
Copyright © 2011-2022 走看看