zoukankan      html  css  js  c++  java
  • 《java入门第一季》之面向对象(方法重写问题)

    方法重载的引入:根据一个案例:

    /*
    	继承中成员方法的关系:
    		A:子类中的方法和父类中的方法声明不一样,这个太简单。
    		B:子类中的方法和父类中的方法声明一样,这个该怎么玩呢?
    			通过子类对象调用方法:
    				a:(先)找子类中,看有没有这个方法,有就使用
    				b:(再)看父类中,有没有这个方法,有就使用
    				c:如果没有就报错。
    */
    class Father {
    	public void show() {
    		System.out.println("show Father");
    	}
    }
    
    class Son extends Father {
    	public void method() {//子类特有的东西
    		System.out.println("method Son");
    	}
    	
    	public void show() {//子类和父类中的方法一样,其实属于方法重写。在这里引入了这个概念
    		System.out.println("show Son");
    	}//如果把son中的show()屏蔽掉,子类对象调用show(),这个时候调用的就是父类中的show()*/子类对象既可以调用本类还可以调用父类
    }
    
    class ExtendsDemo8 {
    	public static void main(String[] args) {
    		//创建对象
    		Son s = new Son();
    		s.show();
    		s.method();
    		//s.fucntion(); //找不到符号
    	}
    }

    方法重写概述:

    /*
    	方法重写:子类中出现了和父类中方法声明一模一样的方法。
    	
    	回顾方法重载:
    		本类中出现的方法名一样,参数列表不同的方法。与返回值无关。
    
    	子类对象调用方法的时候:
    		(先)找子类本身,子类没有的话(再找)父类。
    		
    	方法重写的应用:
    		当子类需要父类的(功能),而(功能主体)子类有自己特有内容时,可以重写父类中的方法。
    		这样,即沿袭了父类的功能,又在这个功能里定义了子类特有的内容。*/
    class Phone {
    	public void call(String name) {//name由子类call方法中传递过来
    		System.out.println("给"+name+"打电话");
    	}
    }
    
    class NewPhone extends Phone{
    	public void call(String name) {
    		//System.out.println("给"+name+"打电话");
    		super.call(name);//super调用父类的内容沿用原来手机打电话的功能,super类似父类的对象,在子类中指代父类对象的引用
    		System.out.println("可以听天气预报了");//方法重写,新手机特有的功能
    	}
    }
    
    class ExtendsDemo9 {
    	public static void main(String[] args) {
    		NewPhone np = new NewPhone();
    		np.call("林青霞");
    	}
    }

    方法重写的注意事项:

    /*
    	方法重写的注意事项
    		A:父类中(私有方法不能被重写)
    			因为父类(私有方法子类根本就无法继承)
    		B:子类重写父类方法时,访问权限不能更低
    			最好就一致
    		C:父类静态方法,子类也必须通过静态方法进行重写
    			其实这个算不上方法重写,但是现象确实如此,至于为什么算不上方法重写,多态中会介绍
    			
    		子类重写父类方法的时候,最好声明一模一样。
    */
    class Father {
    	//private void show() {}
    	
    	/*
    	public void show() {
    		System.out.println("show Father");
    	}
    	*/
    	
    	public void show() {
    		System.out.println("show Father");
    	}
    	
    	public static void daolong() {
    		
    	}
    	
    	
    	public void method() {
    		System.out.println("method father");
    	}
    		
    	
    }
    
    class Son extends Father {
    	//private void show() {}
    
    	/*
    	public void show() {
    		System.out.println("show Son");
    	}*/
    	
    	
    	public void show() {//show()方法重写
    		System.out.println("show Son");
    	}
    	
    	
    	public static void daolong() {
    	}//父类是静态方法,子类重写静态方法
    	
    	
    	public void method() {
    		System.out.println("method Son");
    	}//method()方法重写
    }
    
    class ExtendsDemo10 {
    	public static void main(String[] args) {
    		Son s = new Son();
    		s.show();
    		s.method();
    	}
    }


  • 相关阅读:
    [置顶] Guava学习之Lists
    Study notes for B-tree and R-tree
    uva 620 Cellular Structure
    [置顶] 程序员面试之道(《程序员面试笔试宝典》)之看着别人手拿大把的offer,不淡定了怎么办?
    HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)
    有N个正实数(注意是实数,大小升序排列) x1 , x2 ... xN,另有一个实数M。 需要选出若干个x,使这几个x的和与 M 最接近。 请描述实现算法,并指出算法复杂度
    C# 未能加载文件或程序集“MySQLDriverCS..." 错误解决
    LA 3942 Remember the Word(前缀树&树上DP)
    原根-快速求解一个数的原根
    线程初步了解
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299866.html
Copyright © 2011-2022 走看看