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

  • 相关阅读:
    使用mysqltools配置读写分离环境
    mysql group replication 主节点宕机恢复
    django ---- models继承
    django -- 对模式进行调式(pay with the api)
    django -- 多对多关系的实现
    django -- verbose_name的对数据库层面的影响
    django -- model中只有Field类型的数据才能成为数据库中的列
    django -- 为model 指定数据库名
    django -- 联合索引
    flask基础之jijia2模板使用基础(二)
  • 原文地址:https://www.cnblogs.com/xiaonanman/p/6719206.html
Copyright © 2011-2022 走看看