必须得说一下,子类关于从父类继承过来的private成员这点事儿

本文详细解析了在面向对象编程中,子类如何从父类继承私有成员,解释了私有成员在子类中的不可调用性,并讨论了如何通过将成员设置为protected类型或利用父类公用方法来访问这些私有成员,旨在揭示面向对象设计中的封闭性和保护机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我个人认为学习编程,从面向过程到面向对象的思想转变是个很重要的过程,然而对于类的深入了解是这思想的基础。

今天便记录一下对子类关于从父类继承过来的private成员这点事儿

直入主题

子类从父类那里继承过来的私有成员和方法是不能够被子类调用的,在网上查看发现,其实说父类的private成员是不能被继承给子类的,这一说法是不正确的,意思是父类的private确实是继承给了子类,但是子类不能够随意调用

上代码 没代码我说个XXclass Fathor
{
public void test01()
{
System.out.println("test01");
}
}
class Son extends Fathor
{
void test02()
{
this.test01();
}

}
class test
{
public static void main(String[] args)
{
Son son = new Son();
son.test01();
son.test02();
}
}

这样做显然是不对的 不能直接调用父类的private成员

子类确实继承了来自父类的private成员

当子类被实例化的时候,那部分私有成分也被分配了地址空间,就如网友说的一样空间是有但是一片灰色地带

不能够调用

要想调用 这是就应该将其定义为protected类型 这个小孩子都知道 但是大多数书上并没有告诉你这些private父类遗传物到底是怎么回事 还有一种方法就是用子类中继承过来的父类公用方法来使用这个private成员,现在看来这样的设计也是很有道理的 因为这样做确实保护了父类的私有的东西 真正体现了面向对象中封闭性的思想,鄙人愚见,学识浅薄纯属个人理解还望各位大神批评指教!

<think>好的,用户让我介绍一下子类从父继承了什么,并且要求写一个程序明,要简单一点。首先,我需要回顾一下Java中的继承机制。用户之前的问题是关于Object的,现在转向更一般的继承概念,可能需要从基础讲起。 用户可能刚学Java,对继承的理解还不够深入。需要明确子类继承父类的哪些部分,比如字段、方法,但构造器不被继承私有成员是否能被继承可能需要澄清。用户可能需要一个简单的例子,比如动物和猫这样的,这样直观易懂。 接下来,考虑用户的程序要求。用户希望程序简单,所以例子要尽可能精简。比如,父类有属性和方法,子类继承后可以直接使用或者重写。同,要展示子类如何调用父类的构造器,可能使用super关键字,但用户要求不用代码,所以在解释明这点,但示例中可能需要包含代码。 还要注意用户之前的问题中,回答已经用了猫的例子,可能需要延续这个例子,保持一致性。比如父类Animal,子类Cat,这样用户容易联想。 需要确认是否正确覆盖了继承的内容:public和protected的成员会被继承private不会继承,但可以通过公共方法访问。在示例中,可以给父类一个public方法,子类直接调用,以及一个字段,比如name,通过构造器初始化。 另外,用户可能混淆继承和访问权限,比如父类private字段是否属于继承的一部分。需要明确明,子类拥有父类的所有属性和方法,但能否直接访问取决于修饰符。所以在例子中,父类的name字段如果是private子类不能直接访问,但可以通过super.getName()这样的方法获取。 最后,程序的结构要清晰,注释明每个部分的作用,让用户一目了然。然后分点解释继承的内容,强调方法、属性和构造器的处理,以及重写的概念。确保回答符合用户的需求,简洁明了,没有复杂代码,但又能明问题。</think>我们可以通过一个简单的动物继承示例来理解继承内容: ```java // 父类 class Animal { private String name = "无名"; // 私有属性(不被继承但存在于内存) public void eat() { // 公有方法(被子类继承) System.out.println(name + "正在吃东西"); } } // 子类 class Cat extends Animal { public void meow() { System.out.println("喵喵叫"); eat(); // 直接调用继承父类的方法 } } // 测试 public class Test { public static void main(String[] args) { Cat kitten = new Cat(); kitten.meow(); // 输出:喵喵叫 → 无名正在吃东西 } } ``` **子类继承的内容**: 1. **方法继承**:子类自动获得父类的`public/protected`方法(如示例中的`eat()`) 2. **属性继承**:父类的属性会被继承(如`name`),但`private`属性不能直接访问(需要通过父类提供的方法间接使用) 3. **构造规则**:子类必须调用父类构造器(默认自动调用无参构造器) 4. **扩展能力**:子类可以添加新方法(如`meow()`)或重写父类方法 *注:虽然私有属性`name`在内存中存在,但子类不能直接访问,需要通过父类的公共方法(如果存在)间接使用*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值