java 子类继承父类成员变量的隐藏、实现方法的重写
成员变量的隐藏和方法的重写
Goods.java
public class Goods { public double weight; public void oldSetWeight(double w) { weight=w; System.out.println("double型的weight="+weight); } public double oldGetPrice() { double price = weight*10; return price; } }
CheapGoods.java
public class CheapGoods extends Goods { public int weight; public void newSetWeight(int w) { weight=w; System.out.println("int型的weight="+weight); } public double newGetPrice() { double price = weight*10; return price; } }
Example5_3.java
public class Example5_3 { public static void main(String args[]) { CheapGoods cheapGoods=new CheapGoods(); //cheapGoods.weight=198.98; 是非法的,因为子类对象的weight已经是int型 cheapGoods.newSetWeight(198); System.out.println("对象cheapGoods的weight的值是:"+cheapGoods.weight); System.out.println("cheapGoods用子类新增的优惠方法计算价格:"+ cheapGoods.newGetPrice()); cheapGoods.oldSetWeight(198.987); //子类对象调用继承的方法操作隐藏的double型变量weight System.out.println("cheapGoods使用继承的方法(无优惠)计算价格:"+ cheapGoods.oldGetPrice()); } }
子类对继承父类方法的重写
University.java
public class University { void enterRule(double math,double english,double chinese) { double total=math+english+chinese; if(total>=180) System.out.println("考分"+total+"达到大学最低录取线"); else System.out.println("考分"+total+"未达到大学最低录取线"); } }
ImportantUniversity.java
public class ImportantUniversity extends University{ void enterRule(double math,double english,double chinese) { double total=math+english+chinese; if(total>=220) System.out.println("考分"+total+"达到重点大学录取线"); else System.out.println("考分"+total+"未达到重点大学录取线"); } }
Example5_4.java
public class Example5_4 { public static void main(String args[]) { double math=64,english=76.5,chinese=66; ImportantUniversity univer = new ImportantUniversity(); univer.enterRule(math,english,chinese); //调用重写的方法 math=89; english=80; chinese=86; univer = new ImportantUniversity(); univer.enterRule(math,english,chinese); //调用重写的方法 } }