区分Java的方法覆盖与变量覆盖_java

首先,我们看看关于重载,和覆盖(重写)的简明定义:

方法重载:如果有两个方法的方法名相同,但参数不一致,哪么可以说一个方法是另一个方法的重载。

方法覆盖:如果在子类中定义一个方法,其名称、返回类型及参数签名正好与父类中某个方法的名称、返回类型及参数签名相匹配,那么可以说,子类的方法覆盖了父类的方法

我们重点说说覆盖问题,以如下代码为例:

public class People {
 public String getName() {
  return "people";
 } 

}
public class Student extends People { 

 public String getName() {
  return "student";
 } 

}
public static void main(String[] args) {
  People p=new People();
 System.out.println(p.getName());//运行结果为people 

  Student s=new Student();
 System.out.println(s.getName());//运行结果为student 

 People pp=new Student();
 System.out.println(pp.getName());//运行结果为student 

 } 

上述结果说明:student类的getName方法成功覆盖了父类的方法

我们再来看看变量的覆盖:

public class People {
 protected String name="people"; 

}
public class Student extends People { 

 protected String name="student"; 

}
public static void main(String[] args) { 

  People p=new People();
  System.out.println(p.name);//运行结果为people 

  Student s=new Student();
  System.out.println(s.name);//运行结果为student 

  People pp=new Student();
  System.out.println(pp.name);//运行结果为people 

 }

通过运行结果我发现:变量的覆盖实际上与方法的不尽相同。

用我自己的话说:变量的覆盖最多只能算是半吊子的覆盖。

要不然,向上转换与不会发生数据丢失现象

People pp=new Student();
System.out.println(pp.name);//运行结果为people 

就我个人的经验来说:变量的覆盖很容易让人犯错误.让人感觉又回到了C++的继承[这里不是指C++带virtual的继承]

最后我们再来看一段代码:

public class People {
 protected String name="people";
 public String getName() {
  return name;
 }
}
public class Student extends People { 

 protected String name="student";
 public String getName() {
  return name;
 }
}
main(String[] args) { 

  People p=new People();
  System.out.println(p.getName());//运行结果为people 

  Student s=new Student();
  System.out.println(s.getName());//运行结果为student 

  People pp=new Student();
  System.out.println(pp.getName());//运行结果为student 

 } 

显然,如此的覆盖,才是对我们更有用的覆盖,因为这样才能达到:把具体对象抽象为一般对象的目的,实同多态性

以上只是我个人的看法,有不对的地方欢迎指出来讨论。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java变量覆盖
, java方法覆盖
, java方法变量
, java覆盖父类方法
java覆盖父类变量
java 变量覆盖、java覆盖父类方法、java方法覆盖、java子类覆盖父类方法、java方法的覆盖,以便于您获取更多的相关知识。

时间: 2024-09-27 06:31:41

区分Java的方法覆盖与变量覆盖_java的相关文章

浅谈java的方法覆盖与变量覆盖

首先,我们看看关于重载,和覆盖(重写)的简明定义: 方法重载:如果有两个方法的方法名相同,但参数不一致,哪么可以说一个方法是另一个方法的重载. 方法覆盖:如果在子类中定义一个方法,其名称.返回类型及参数签名正好与父类中某个方法的名称.返回类型及参数签名相匹配,那么可以说,子类的方法覆盖了父类的方法 我们重点说说覆盖问题,以如下代码为例: [java] view plain copy  print? public class People {       public String getName

Java的方法重载与变量作用域简介_java

方法的重载上面使用的max方法仅仅适用于int型数据.但如果你想得到两个浮点类型数据的最大值呢? 解决方法是创建另一个有相同名字但参数不同的方法,如下面代码所示: public static double max(double num1, double num2) { if (num1 > num2) return num1; else return num2; } 如果你调用max方法时传递的是int型参数,则 int型参数的max方法就会被调用: 如果传递的事double型参数,则doubl

Java并发编程之volatile变量介绍_java

volatile提供了弱同步机制,用来确保将变量更新通知到其它线程.volatile变量不会被缓存在寄存器中或者对其它处理器不可见的地方,因此在读取volatile变量时总会返回最新写入的值.可以想象成如下语义,然而volatile是更轻量级的同步机制.volatile只能确保可见性,但不能保证原子性.也就是说不能在复合操作用volatile变量,比如i++. 复制代码 代码如下: public synchronized void setValue(int value){ this.value

dedecms的变量覆盖漏洞导致注入漏洞

文件是:include/filter.inc.php 防御方法 /include/filter.inc.php /**  *  过滤不相关内容  *  * @access    public  * @param     string  $fk 过滤键  * @param     string  $svar 过滤值  * @return    string  */ $magic_quotes_gpc = ini_get('magic_quotes_gpc'); function _FilterAl

继承 覆盖 多态-java私有方法可以继承吗

问题描述 java私有方法可以继承吗 私有的成员和方法可以在子类中被继承吗,如果不能为什么不能,求解详细点 解决方案 java继承中的"缺陷":"覆盖"私有方法java继承中的"缺陷":"覆盖"私有方法Java 继承与初始化."覆盖"私有方法 解决方案二: 首先说私有的成员和方法不能被子类继承,这是java语法规范强制规定,也是面向对象设计的原则. 其次,脱离具体的语言,从面向对象角度来看,用private

静态 非静态 覆盖-java中子类的静态方法能否覆盖父类的静态方法?请大神们帮忙分析下!

问题描述 java中子类的静态方法能否覆盖父类的静态方法?请大神们帮忙分析下! 第一题: class Parent { public void nonStaticMethod() { System.out.println("Parent's Non-Static Method is Called"); } public static void staticMethod() { System.out.println("parent's static method is call

java中不能修饰方法不能修饰变量不能修饰类的关键词分别是什么

问题描述 java中不能修饰方法不能修饰变量不能修饰类的关键词分别是什么 java中不能修饰方法不能修饰变量不能修饰类的关键词分别是什么 实现现多个接口的类是不是必须重写其所有方法, 解决方案 首先,第一个问题,了解哪些关键词能修饰方法.变量.类比较容易些. 修饰方法的关键字:public/private/protected/default ,static, 修饰变量了:final ,static:修饰类的:public/private/protected/default,static 其次,实

java当中的接口的变量都是final修饰的常量,那么方法的方法是final修饰的吗

问题描述 java当中的接口的变量都是final修饰的常量,那么方法的方法是final修饰的吗 java当中的接口的变量都是final修饰的常量,那么方法的方法是final修饰的吗 final能不能修饰类呢 解决方案 不知道你说的方法的方法是什么 final可以修饰类,但是含义不同,final类表示无法派生. 解决方案二: final可以修饰类,方法,和域, 如果修饰方法, 参考这个博客吧http://blog.csdn.net/zrf1335348191/article/details/501

java 多线程方法加锁获取自增变量重复问题

问题描述 java 多线程方法加锁获取自增变量重复问题 /** 测试多线程并发获取唯一子增长的值 @author Administrator * */ public class BB { private int increment = 0; final static Set set = new HashSet(); final static List list = new ArrayList(); public synchronized int getauto() { return increm