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); //调用重写的方法
    }
}
时间: 2024-10-10 06:45:07

java 子类继承父类成员变量的隐藏、实现方法的重写的相关文章

【面向对象】变量的隐藏,方法的重…(转载)

[面向对象]变量的隐藏,方法的重- 1  变量的隐藏和方法的重写(覆盖) 1)变量的隐藏:子类定义的属性的名字跟从父类中继承过来的属性名字一致,子类新定义的属性会覆盖从父类中继承来的属性. eg: class Person{ String name = "关羽"; } class Boss extends Person{ String name = "关羽"; --被子类定义同名的属性给覆盖了 String name = "刘备"; } main

成员变量的隐藏,方法的覆盖,super关键字

成员变量的隐藏:当父类和子类有相同的成员变量时,即定义了与父类相同的成员变量时,就会发生子类对父类变量的隐藏.对于子类的对象来说,父类中的同名成员变量被隐藏起来,子类就会优先使用自己的成员变量,父类成员隐藏. public class yincang {public static void main(String []args){ SonA son=new SonA(); son.showson(); FatherA father=new FatherA(); father.showfather

Java中的静态变量和静态函数

Java中的静态变量和静态函数(方法)和C++中也类似.有几点需要重新复习一下: 1)如果想让一个类的所有对象共享数据,可以使用静态变量:如果想共享函数,可以使用静态函数. 2)如果某个对象修改了静态变量的值,那么该类的所有对象都会受到影响. 3)静态变量和静态函数在类创建对象之前就可以调用,这点和普通的变量函数很不一样. 4)常量可以声明为final static,所有对象都共享. 5)访问一个类的静态变量和静态函数,一般都使用"类名.静态变量"或者"类名.静态函数&quo

Java类成员(成员变量和方法)的覆盖与隐藏归纳

以前就知道重写override和重载overload的区别,平时也是逮着用就是了,Eclipse报错再说. 最近看一本书里面出现了重写.替换.覆盖.置换.隐藏.重载,简直乱得不行,归纳整理一下. 从全局来看,java只有重写.隐藏.重载3种,具体归纳如下: 基本概念: 方法签名:方法名+参数列表(参数类型.个数.顺序).=================================[重写]================================= 某些书又叫覆盖.替换.置换.本文统一

JAVA成员变量的隐藏

一.如果子类与父类中有一个相同名称的成员变量,那么子类的成员变量会不会覆盖父类的成员变量?我们看下在的例子: public class A { public int x=10; } public class B extends A { public int x=20; } public class C { public static void main(String[] args) { A a=new B(); System.out.println(a.x); //1 B b=new B();

Java子类与父类方法的隐藏和覆盖

class Base{ ????int x = 1; ????static int y = 2; ????String name(){ ????????return "mother"; ????} ????static String staticname(){ ????????return "static mother"; ????} } class Subclass extends Base{ ????int x = 4; ????int y = 5; ????S

Java子类访问父类的私有成员变量

/**子类会继承父类所有的属性和方法. * 但是根据不同的权限标识符,子类不可见父类的私有变量,但可以通过父类的公共方法访问私有变量 * 所以对于重名变量,子类和父类都各有一份. * 对于子类和父类中重名的方法,则为重写.即子类重写了父类的方法,用于多态. * 同一个类中函数的签名不同,则为方法的重载.函数的签名为函数名+参数列表,与返回值无关. */

Java后端程序员1年工作经验总结

java后端1年经验和技术总结(1) 1.引言 毕业已经一年有余,这一年里特别感谢技术管理人员的器重,以及同事的帮忙,学到了不少东西.这一年里走过一些弯路,也碰到一些难题,也受到过做为一名开发却经常为系统维护和发布当救火队员的苦恼.遂决定梳理一下自己所学的东西,为大家分享一下. 经过一年意识到以前也有很多认识误区,比如: 偏爱收集,经常收集各种资料视频塞满一个个硬盘,然后心满意足的看着容量不行动. 不重基础,总觉得很多基础东西不需要再看了,其实不懂的地方很多,计算机程序方面任何一个结果都必有原因

Java:类与继承(隐藏和覆盖的问题)

盒子先生金金 Java:类与继承(隐藏和覆盖的问题) Java:类与继承 Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点,今天我们就来了解一些类与继承的相关知识.首先,我们讲述一下与类的初始化相关的东西,然后再从几个方面阐述继承这一大特性.以下是本文的目录大纲: 一.你了解类吗? 二.你了解继承吗? 三.常见的面试笔试题 若有不正之处,请多多谅解并欢迎批评指正. 请尊重作者劳动成果