zoukankan      html  css  js  c++  java
  • java基础之多态的那些事儿

    同一个对象在不同时刻体现出来的不同状态,叫多态

    多态的前提:

                 a.有继承或者实现关系。

                 b.有方法重写。

                 c.有父类或者父接口引用指向子类对象。

    多态的分类:

            a:具体类多态

    class Fu{
    }
    class Zi extends Fu{
    }
    
    Fu f = new Zi();
    

         b.抽象类多态

    abstract class Fu{
    }
    class Zi extends Fu{
    }
    
    Fu f = new Zi();

            c.接口多态 

    interface Fu{
    }
    class Zi implements Fu{
    }
    
    Fu f = new Zi();

    多态中的成员访问特点:

    1、成员变量:编译看左边,运行看左边(执行结果)

    class Fu{
    	public int num = 100;
    }
    class Zi extends Fu{
    	public int num = 1000;
    	public int num2 = 200;
    }
    public class DuoTai {
          public static void main(String[] args) {
        	 ///要父类引用指向子类对象,父 f = new 子(); 
        	  Fu f = new Zi();
        	  System.out.println(f.num);//100,执行的是左边父类
        	  ///System.out.println(f.num2);编译不通过,报错
          }
    }
    

    2、构造方法:创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。子类的构造都会默认访问父类构造。

    package Training;
    class Fu{
    	public Fu() {
    		System.out.println("我是父类构造方法!!!");
    	}
    }
    class Zi extends Fu{
    	public Zi() {
    		System.out.println("我是子类构造方法!!!");
    	}
    }
    public class DuoTai {
          public static void main(String[] args) {
        	  new Zi();
          }
    }
    ///默认先访问父类构造方法
    
    1 我是父类构造方法!!!
    2 我是子类构造方法!!!
    View Code

    3、成员方法:编译看左边,运行看右边

    class Fu{
    	public void method() {
    		System.out.println("我是父类成员方法!!!");
    	}
    }
    class Zi extends Fu{
    	public void method() {
    		System.out.println("我是子类成员方法1!!!");
    	}
    	public void Zimethod() {
    		System.out.println("我是子类成员方法2!!!");
    	}
    }
    public class DuoTai {
          public static void main(String[] args) {
        	  Fu f = new Zi();
        	  f.method();
        	  ///f.Zimethod();编译不通过报错,父类不能使用子类特有的功能
          }
    }
    
    1 我是子类成员方法1!!!
    View Code

    4、静态方法:编译看左边,运行看左边

    class Fu{
    	public static void method() {
    		System.out.println("我是父类静态方法!!!");
    	}
    }
    class Zi extends Fu{
    	public static void method() {
    		System.out.println("我是子类静态方法!!!");
    	}
    }
    public class DuoTai {
          public static void main(String[] args) {
        	  Fu f = new Zi();
        	 f.method();
          }
    }

     来自传智播客的刘意老师的经典讲解:

    多态的问题理解:
    	class 孔子爹 {
    		public int age = 40;
    		
    		public void teach() {
    			System.out.println("讲解JavaSE");
    		}
    	}
    	
    	class 孔子 extends 孔子爹 {
    		public int age = 20;
    		
    		public void teach() {
    			System.out.println("讲解论语");
    		}
    		
    		public void playGame() {
    			System.out.println("英雄联盟");
    		}
    	}
    	
    	//Java培训特别火,很多人来请孔子爹去讲课,这一天孔子爹被请走了
    	//但是还有人来请,就剩孔子在家,价格还挺高。孔子一想,我是不是可以考虑去呢?
    	//然后就穿上爹的衣服,带上爹的眼睛,粘上爹的胡子。就开始装爹
    	//向上转型
    	孔子爹 k爹 = new 孔子();
    	//到人家那里去了
    	System.out.println(k爹.age); //40
    	k爹.teach(); //讲解论语
    	//k爹.playGame(); //这是儿子才能做的
    	
    	
    	//讲完了,下班回家了
    	//脱下爹的装备,换上自己的装备
    	//向下转型
    	孔子 k = (孔子) k爹; 
    	System.out.println(k.age); //20
    	k.teach(); //讲解论语
    	k.playGame(); //英雄联盟
    	
    

     

    不忘初心,方得始终。只有走过弯路,才更确信当初最想要的是什么。
  • 相关阅读:
    C#实现根据域名查询ip实例
    Ajax: 一个建立Web应用的新途径(转)
    CRC循环校验的具体算法(转)
    生成静态文件的新闻系统核心代码(.net C#)
    一个ajax的例子
    使用 JavaScript 实现 XMLHttpRequest,在IE,FireFox 上测试通过
    微软SQL Server 2005的30项顶尖特性(转)
    利用XMLHTTP无刷新自动实时更新数据(转)
    五子棋的核心算法(转)
    编写安全的SQL Server扩展存储过程(转)
  • 原文地址:https://www.cnblogs.com/wszhu/p/10732849.html
Copyright © 2011-2022 走看看