• 《java入门第一季》之面向对象(重头戏多态)


    接下来介绍java第三大特性——多态性

    /*
    	多态:同一个对象(事物),在不同时刻体现出来的不同状态。
    	举例:
    		猫是猫,猫是动物。
    		水(液体,固体,气态)。
    		
    	多态的前提:
    		A:要有继承关系。
    		B:要有方法重写。
    			其实没有也是可以的,但是如果没有这个就没有意义。
    				动物 d = new 猫();
    				d.show();
    				动物 d = new 狗();
    				d.show();
    		C:要有父类引用指向子类对象。
    			父 f =  new 子();
    			
    	用代码体现一下多态。
    	
    	多态中的成员访问特点:
    		A:成员变量
    			编译看左边,运行看左边。
    		B:构造方法
    			创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。
    		C:成员方法
    			编译看左边,运行看(右边)。
    		D:静态方法
    			编译看左边,运行看左边。
    			静态和类相关,算不上重写,所以,访问还是左边的
    			
    			然而由于成员方法存在方法重写,所以它运行看右边。
    */
    class Fu {
    	public int num = 100;
    
    	public void show() {
    		System.out.println("show Fu");
    	}
    	
    	public static void function() {
    		System.out.println("function Fu");
    	}
    }
    
    class Zi extends Fu {
    	public int num = 1000;
    	public int num2 = 200;
    
    	public void show() {//对父类的方法重写
    		System.out.println("show Zi");
    	}
    	
    	public void method() {//自己的方法
    		System.out.println("method zi");
    	}
    	
    	public static void function() {//静态方法也要“重写”,其实不算是重写
    		System.out.println("function Zi");
    	}
    }
    
    class DuoTaiDemo {
    	public static void main(String[] args) {
    		//要有父类引用指向子类对象。
    		//父 f =  new 子();
    		Fu f = new Zi();
    		System.out.println(f.num);
    		//找不到符号,父类中没有num2
    		//System.out.println(f.num2);
    		
    		f.show();
    		//找不到符号,父类中没有method()
    		//f.method();
    		f.function();
    	}
    }
    执行结果是:100

                           show Zi

                            function Fu


    多态的弊端:


    /*
    	多态的弊端:
    		不能使用子类的特有功能。
    */
    class Fu {
    	public void show() {
    		System.out.println("show fu");
    	}
    }
    
    class Zi extends Fu {
    	public void show() {
    		System.out.println("show zi");
    	}
    	
    	public void method() {
    		System.out.println("method zi");
    	}
    
    }
    
    class DuoTaiDemo3 {
    	public static void main(String[] args) {
    		//测试
    		Fu f = new Zi();
    		f.show();
    		f.method();//由于父类中没有method()。所以报错。错误描述:找不到符号
    	}
    }
    那么应该怎么解决这个问题呢?向下转型。会在下一篇文章中对向下转型做出介绍。
    

  • 相关阅读:
    js字符串转数组,转对象方法
    react执行yarn eject后配置antd的按需加载
    DOM对象与jquery对象区别
    vscode使用git管理代码
    使用vscode编辑器编辑CPU100%使用率问题
    Java 多态
    1,随机生成一个500m的txt,填充内容为小写的26个字母。生成后,查找abc字符,打印出其数量和位置(越快越好)
    bat 文件
    word2Html
    生成压缩文件
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299858.html
Copyright © 2020-2023  润新知