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 类型的方法是不能被重写的。

  • 相关阅读:
    CQUOJ 10819 MUH and House of Cards
    CQUOJ 9920 Ladder
    CQUOJ 9906 Little Girl and Maximum XOR
    CQUOJ 10672 Kolya and Tandem Repeat
    CQUOJ 9711 Primes on Interval
    指针试水
    Another test
    Test
    二分图匹配的重要概念以及匈牙利算法
    二分图最大匹配
  • 原文地址:https://www.cnblogs.com/xiaonanman/p/6719206.html
Copyright © 2011-2022 走看看