首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Java:从超类继承的公共方法调用私有方法。

Java:从超类继承的公共方法调用私有方法。
EN

Stack Overflow用户
提问于 2015-01-08 23:36:46
回答 2查看 838关注 0票数 2
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Test {
  public static void main(String args[]){
      Student s = new Student();
      s.printPerson();
  }
}

class Person{
  private String getInfo(){
      return "Person";
  }
  public void printPerson(){
      System.out.println(getInfo());
  }
}

class Student extends Person{
  private String getInfo(){
      return "Student";
  }
}

输出为Person。我对这个结果感到困惑。在main方法中,引用类型是Student。因此,在执行s.printPerson()时,它应该执行Student的方法。关键是,在从超类继承的公共方法中,调用了哪个私有方法?为什么?

我认为在s.printPerson()中,它会调用StudentgetInfo()。但事实证明并非如此。IDE告诉我

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private String getInfo(){
      return "Student";
}

从未使用过。

有没有人能帮我一下?

EN

回答 2

Stack Overflow用户

发布于 2015-01-08 23:39:40

在Java中,private methods are not inherited

子类不继承父类的private成员。但是,如果超类具有用于访问其私有字段的公共或受保护的方法,则子类也可以使用这些方法。

您不能通过创建另一个getInfo方法来覆盖getInfo,因为它不是继承的。这就是为什么你的集成开发环境会给你一个“从未使用过”的警告,因为在Student中没有任何东西使用它。调用来自PersongetInfo,因为它可用于PersonprintPerson方法,所以输出Person

若要重写方法,该方法不能为private。您可以将getInfo包设置为私有(无访问修饰符)、protectedpublic。然后Student将能够覆盖它。

票数 2
EN

Stack Overflow用户

发布于 2015-01-08 23:41:11

您可以使用private修改器。这个修饰符意味着该方法只在类本身中可见,不能从其他类中看到,甚至不能从它的子类和超类中看到。因此,当您从类Person调用getInfo()时,惟一可见的方法是Person类中定义的方法。实际上,这意味着在Java中不继承私有方法。

尝试将private修饰符更改为protected。然后,子类可以看到来自超类的方法,因此它们可以覆盖该方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27851516

复制
相关文章
Java 反射机制详解:私有方法调用头大?如何通过反射调用类中的私有方法?
在 Java 中如果我们使用 new 关键字调用构造函数对类进行实例化,我们就可以根据在这个类中的修饰符来访问类中定义的非私有方法。但是如果需要在其他类调用私有的方法,就可以利用 Java 中提供的反射来实现。
白鹿第一帅
2022/05/08
2.4K0
Java 反射机制详解:私有方法调用头大?如何通过反射调用类中的私有方法?
Python类继承(调用父类成员与方法)
python中类的初始化方法是__init__(),因此父类子类的初始化方法都是这个,如果子类不实现这个函数,初始化时调用父类的初始化函数,如果子类实现这个函数,就覆盖了父类的这个函数,既然继承父类,就要在这个函数里显式调用一下父类的__init__(),这跟C++,jAVA不一样,他们是自动调用父类初始化函数的。
里克贝斯
2021/05/21
5.7K0
Python类中公开方法、私有方法和特殊方法的继承原理
在Python中,对象的私有成员在类外部、派生类或程序中无法直接访问,但是可以通过“对象名._类名__私有成员名”这样一种特殊的形式来访问。 基类的构造方法和公开方法可以在类的外部直接访问,也可以被派生类继承。 在访问对象成员时,如果不存在则按照派生顺序逆序查找其基类中是否存在该成员,如果都不存在则抛出异常。 >>> class A(object): #构造方法可能会被派生类继承 def __init__(self): self.__private() self.p
Python小屋屋主
2018/04/16
2.1K0
PHP通过反射方法调用执行类中的私有方法
PHP 5 具有完整的反射 API,添加了对类、接口、函数、方法和扩展进行反向工程的能力。
魏杰
2022/12/23
1.7K0
继承类的方法
定义一个父类,用子类去继承父类所拥有的方法、定义属性,然后使用测试文件实现子类输出父类的方法信息,属性等。
算法与编程之美
2023/08/22
1840
继承类的方法
Python类的调用以及私有和公有属性方法的调用
代码 class Site: __wocao = 123 #私有属性 wocao = 456 #公有属性 def __init__(self, name, url): self.name = name # public self.__url = url # private def who(self): print('name : ', self.name) print('url : ', self._
院长技术
2021/02/22
2.5K0
使用 Java 中的反射机制调用类中的私有方法原理详解
在 Java 中如果我们使用 new 关键字调用构造函数对类进行实例化,我们就可以根据在这个类中的修饰符来访问类中定义的非私有方法。但是如果需要在其他类调用私有的方法,就可以利用 Java 中提供的反射来实现。
白鹿第一帅
2021/03/02
4.2K0
使用 Java 中的反射机制调用类中的私有方法原理详解
Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)
FatherA.__init__(self) # 在子类中调用父类的方法:父类名.方法名称(参数)
授客
2019/09/11
3.2K0
RSviewSE软件调用公共画面方法
我们在使用组态软件做控制画面时,有时会遇到一些有规律的现象,比如我们在一个项目中有很多控制方式相同的阀门或电机,那么我们在做控制画面时,经常会做一个公用的操作画面,不同设备可以同时调用这个画面对其进行控制。还有,我们在一个项目里面可能会用到很多个一模一样的设备图标,只是他们关联的变量不一样。那么,在RSViewSE软件中,我们可以用参数调用和全局对象来实现这两个功能。
剑指工控
2021/11/09
4670
Android 通过 JNI 调用 Java 类的构造方法和父类的方法
Android 还可以通过 JNI 来调用 Java 一个类的构造方法,从而创建一个 Java 类。
音视频开发进阶
2019/07/26
2.7K0
调用内部或私有方法的N种方法
非公开的类型或者方法被“隐藏”在程序集内部,本就不希望从外部访问,但是有时候调用一个内部或者私有方法可能是唯一的“救命稻草”,这篇文章列出了几种具体的实现方式。以如下这个Foobar类型为例,它具有一个内部属性InternalValue,我们来看看有多少种方式可以从外部获取一个Foobar对象的InternalValue属性值。
蒋金楠
2023/07/21
2210
Java通过反射获取类调用方法
Java通过反射获取类调用方法 示例 ReflectUtil.java 模块一 Gjc.java 模块二 UiUtil.java DialogManager.java 在不同模块之间,需要使用其他模块的方法,这个时候就需要用到反射了 示例 模块一操作模块二,即模块一调用模块二中的方法 ReflectUtil.java /** * 反射工具类 */ public class ReflectUtil { public static Class getClass(String name) {
是阿超
2022/08/07
1.9K0
[C#]如何访问及调用类中私有成员及方法
本文为原创文章、源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称、作者及网址,谢谢!
CNXY
2019/05/24
2.8K0
objective-C 的OOP(上)--类定义、继承及方法调用
上一篇展示了如何用传统的“面向过程编程方法”,实现画“矩形”、“圆”、“椭圆”,这一篇看下如何改用OOP的方法来实现: 因为要用到“颜色”以及“矩形区域”二个枚举,先把他们抽出来单独放在CommDef
菩提树下的杨过
2018/01/22
1.2K0
objective-C 的OOP(上)--类定义、继承及方法调用
从Java继承类的重名static函数浅谈解析调用与分派
今天被实习生问了这么个问题: 在java中,static成员函数是否可以被重写呢?
老白
2018/08/01
1.2K0
Python类中的私有属性和私有方法
Python是面向对象的语言,在Python里一切皆对象,所以大部分情况下,我们都是通过类的方式来编程。
Python碎片公众号
2021/02/26
3K0
Python类中的私有属性和私有方法
静态方法只能通过类名进行调用_java非静态方法可以调用静态方法吗
1、new xx().静态(); //使用对象调用,不推荐 2、xx.静态(); //类名调用,正规调用方法,推荐
全栈程序员站长
2022/11/17
1.2K0
重写父类方法和调用父类方法
class Animal(object): def eat(self): print("-----吃-----") def drink(self): print("-----喝-----") class Dog(Animal): def bark(self): print("-----汪汪叫------") print("-----汪汪叫------") print("-----汪汪叫------"
汪凡
2018/05/29
2K0
点击加载更多

相似问题

java从私有类调用公共方法

35

继承调用超类方法java

10

Java继承调用超类方法

70

Java :从超类继承类中的GetDeclaredFields()方法调用

22

Java继承调用对象的超类方法

42
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文