zoukankan      html  css  js  c++  java
  • 成员变量的隐藏和方法重写(覆盖)


      在类的层次结构中,当子类发现继承自父类的成员变量或方法不满足自己的要求时,就会对其重新定义。当子类的成员变量与父类的成员变量同名时(声明的类型可以不同),子类的成员变量会隐藏父类的成员变量;当子类的方法与父类的方法具有相同的名字、参数列表、返回值类型时,子类的方法就叫做重新(override)父类的方法(也叫做方法的覆盖)。方法的重写是动态多态性的表现。

      当隐藏的成员变量或重写的方法在子类对象中调用时,它总是参考子类中定义的版本,弗雷中相应的定义就被隐藏。如果想使用父类中被隐藏的成员变量或被重写的成员方法就要使用super关键字。

      示例:

    public class Employee{
    	String name;
    	int salary;			//父类中定义salary成员变量
    	public Employee(){	//无参构造方法
    		
    	}
    	public Employee(String name,int salary){	//含有两个参数的构造方法
    		this.name = name;
    		this.salary = salary;
    	}
    	public void printInfo(){		//输出员工的相关信息
    		System.out.println("Name:"+name+"
    "+"salary:"+salary+"
    ");
    	}
    }
    

      示例:经历高工资,超过3500,交税,用double类型,在Manager.java 中对salary 进行重新定义,并对父类的printInfo() 方法进行重写。

    //Manager.java
    public class Manager extends Employee{
    	double salary;			//子类中定义salary成员变量,隐藏了父类的salary成员变量
    	String department;
    	public Manager(){		//无参构造方法
    		
    	}
    	//含有3个参数的构造方法
    	public Manager(String name,double salary,String department){
    		this.name = name;			//使用从父类继承的name属性
    		this.salary = salary;
    		this.department = department;
    	}
    	//对父类的printInfo()进行重写、输出管理者的信息
    	public void printInfo(){
    		System.out.pringln("Name:"+name+"
    Department:"+department+"
    Salary:"+
    							salary+"
    ");
    	}
    }
    
    //测试类Test.java
    public class Test{
    	public static void main(String[] args){
    		Employee e = new Employee("张三",1900);
    		e.printInfo();
    		System.out.println("e.salary="+e.salary);
    		Manager m = new Manager("李四",4545.4,"XXXX");
    		m.printInfo();
    		System.out.println("m.salary="+m.salary);
    		Manager s = new Manager("王五",4545.5,"XXXX");
    		s.printInfo();
    	}
    }
    

      下面给出方法重写的规则:

      1.方法的重写一定要有继承关系。

      2.方法的重写要求子类与父类的方法名相同、参数列表相同、返回值类型相同,不能抛出比父类更多的异常。

      3.重写父类的方法时不能降低父类方法的可见性。

      4.父类中的私有方法,不能被子类继承,就是说即使子类中将其覆盖了也不会有多态。

      5.static 类型的方法是不能被重写的。

  • 相关阅读:
    form 表单验证常用正则记录
    定位某一项值在多维数据中的位置
    jquery weui picker多次动态赋值
    页面旋转立方体图片
    微信开发者工具中的正则表达式解析
    Jquery WEUI 滚动加载(infinite)不触发
    背景线条实现
    进入博客
    tomcat 修改内存配置
    win10配置jdk环境变量
  • 原文地址:https://www.cnblogs.com/xiaonanman/p/6719206.html
Copyright © 2011-2022 走看看