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();
    	}
    }


  • 相关阅读:
    【转】如何解决Verilog中参数化的赋值:赋全0,赋全1,赋全Z,赋全x
    【转】PCIe DMA
    【转】PCIe学习(二)——PCIe DMA关键模块分析之一
    PCIe配置空间
    [转]PCIe学习笔记之MSI/MSI-x中断及代码分析
    [转]常用通信接口保护电路
    [转]原理图和PCB元件对应查找--Altium Designer
    [原]PCB中MARK点制作
    [转]使用Altium Designer软件铺铜后再挖铜
    支持Json进行操作的Javascript类库TAFFY DB
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299866.html
Copyright © 2011-2022 走看看