父类变量私有化后,在子类的构造方法中,为什么使用父类构造方法super(参数),可以给子类对象赋值

```class Person
{
//私有属性是不能被继承的
private String name ;
private int age;
//构造方法
public Person()
{

    }
    public Person(String name,int age)
    {
        this.name = name ; 
        this.age = age;
    }
    //set/get方法
    //继承了set/get方法,
    public void setName(String name)
    {
        this.name = name;
    }
    public String  getName() 
    {
        return this.name;
    }
    public void setAge(int age)
    {
        this.age = age;
    }
    public int getAge() 
    {
        return this.age;
    }
    //吃饭
    public void eat() 
    {
        System.out.println("吃饭");
    }

}
//老师类
class Teacher extends Person1
{

//有参数的构造方法
public Teacher(String name ,int age)
{
super(name,age);//为什么用父类的构造方法能够给子类的变量赋值??????????????
}

//讲课

public void jiangKe()
{
System.out.println(this.getName() +"讲课");
}
}

为什么在子类的构造方法中,super(参数 ),可以给子类的变量赋值,super()调用的不是父类的构造方法吗

5个回答

你这是用super()给父类的对象赋值,赋值之后你可以在子类中通过父类中的getter,setter方法在子类中得到所附的值, 而不是你在用super给子类赋值

你好,确实你的代码里父类Person的私有化成员name、age,子类Teacher没有直接操作的权限(你用编译器自动补全功能也能发现这个现象)因此使
用了public的set/get方法在子类操作父类属性,但是你的代码里子类Teacher并没有属于它自己的变量啊,其次super()确实是调用父类的构造方法,父类中要有相应的构造方法相对应(指参数类型、数量、顺序等一致),使用了super()改变的只是父类成员的值,例如实例化一个子类对象teacher,使用
子类构造方法public Teacher(String name,int age){super(name,age);}(这里我想再提下代码里子类Teacher没有自己的name、age属性,要测试的话可以自己加上看看,Teacher t = new Teacher("a",1);)再用get方法t.getAge();查看输出,再打印输出子类的age,看看两个大小是否一致,这样你应该
更能发现super()的作用了,总计下super()调用的是父类构造方法、公有化成员、成员方法

diuqiuren1234
diuqiuren1234 回复HKDXiaoFan: 不好意思,这么久了才回复,我的意思只是贴的代码里Teacher类没有写出属于Teacher的name属性来(这样说应该更准确),但Teacher类可是继承了Person类,Teacher自然也继承了父类的非私有属性(关于私有属性是否被继承你可以参考知乎上的见解,https://www.zhihu.com/question/51345942/answer/145388196,同时子类没有权限直接操作父类私有化属性的值,我那么多话其实只想说下super的特点,你应该测试过子类和父类有同名成员变量的情况吧(不论私有、公共),此时再用super方法或this分别做测试,我一开始认为你想了解的只是简单的super用法、特点,现在觉得你应该更想也更需要了解继承的关系和特点
一年多之前 回复
HKDxiaofan
HKDXiaoFan Teacher t = new Teacher("a",1),我们teacher类中的get方法得到的值t.getName = a
接近 2 年之前 回复
HKDxiaofan
HKDXiaoFan 你的意思是说super()是给Person类的对象赋值的,用getAge方法得到的值其实也是Person类对象的值吗,Teacher类对象其实没有name的吗
接近 2 年之前 回复

抱歉,上个回答格式不整齐,暂时用不惯问答的换行功能,我想大概知道问题的情况了,可能你代码里子类本就没有name、age属性,不过没关系

记住super方法特点还是没错的

是调用的父类的构造函数没错啊,调完了父类被实例化,age和name被赋值,子类继承get方法,调用get方法获取的就是上面被赋值的age和name

虽然说属性是私有的,但是你有get方法,可以获得父类的属性的值

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
子类构造方法与父类构造方法的问题
子类不能继承父类的构造方法,那为什么在子类创建对象的时候却总是先调用父类的构造方法类呢?那么这样一来子类的构造方法还有没有用呢?这是为什么?又是出于那方面的考虑?
关于子类构造方法与父类构造方法......
jbuilder中 子类继承了父类 但在写子类构造中调用父类构造时super(); 就出现了错误 super下面出现红线 请高手举正确例子指教 谢谢...
子类父类构造方法的调用
构造方法的调用顺序: 首先是顶级父类, 然后是上一级父类, 最后是子类。 也就是说实例化子类对象,首先要实例化父类对象,然后再实例化子类对象,所以在实例化子类构造方法访问父类的构造方法前,父类已经完成实例化操作。
子类调用父类构造方法
[code=Java]import java.awt.*;rnimport java.awt.event.*;rnpublic class MPlusrnrn public static void main(String[] args) rn rn MyFrame f1=new MyFrame();rn f1.launch();rn rnrnclass MyFrame extends Framernrn super("Plus");rn TextField t1;rn TextField t2;rn TextField t3;rn public void launch()rn setLayout(new FlowLayout());rn t1 = new TextField(10);rn Label l1 = new Label("+");rn t2 = new TextField(10);rn Button b1 = new Button("=");rn t3 = new TextField(15);rn b1.addActionListener(new Monitor(this));rn add(t1);rn add(l1);rn add(t2);rn add(b1);rn add(t3);rn pack();rn setVisible(true);rnrn rnrnclass Monitor implements ActionListenerrnrn MyFrame f1 = null;rn public Monitor(MyFrame f2)rn f1 = f2;rn rn public void actionPerformed(ActionEvent e)rn int n1 = Integer.parseInt(f1.t1.getText());rn int n2 = Integer.parseInt(f1.t2.getText());rn f1.t3.setText(""+(n1+n2));rn rn[/code]
子类引用父类构造方法
java训练题目 编写程序实现子类对父类构造方法的引用?
子类与父类构造方法的问题
今天。在看马士兵的教学视频里面,隐隐约约懂得子类构造方法是要调用方法。是不是如果没有显示调用父类的构造方法系统就会自动把父类的无参构建方法给你放在子类构建的第一行。 是不是子类的构造方法都必须每一个中第一行对父类的进行调用?如果父类没有无参构造方法或没有有参构造方法,或两者都没有,其子类在构造方法的时候,怎么办呢? 下面是学习时的一些代码,自己弄了下:如果父类只有无参、即使子类里面没有调用,...
为什么子类的构造方法要调用父类的构造方法
原因: 其实子类的所有构造方法的第一行都有一条隐身的语句super 解析: 在最开始总是看着其他人在写子类的构造方法的时候总是在第一句写出super(),开始有一些不理解,但是通过查找一些资料有了更为清晰的理解。 super()表示父类的构造函数并会调用于参数相对应的父类中的构造函数。子类中,它在调用父类中空参数的构造函数。因为子类继承父类,会继承到父类中的数据,所以必须要看父类是如何...
继承:在子类构造方法中调用父类的构造方法
  abstract class Pet { private String name; private String sex; public Pet(String name,String sex) { this.name = name; this.sex = sex; } ...
java中子类构造方法和父类构造方法
有继承关系的前提下,子类一定会调用父类的构造方法。因为构造方法是用来进行初始化的,子类要初始化,必须先使用父类的构造方法。 以下情形参考: 1.当子类不重写构造方法,子类默认拥有一个无参构造方法,但是,注意,这个构造方法第一行默认执行super();   class Father{ f(){ System.out.println("子类会调用Father的构造方...
父类构造方法、父类静态方法、父类一般方法、子类构造方法、子类静态方法、子类一般方法调用顺序
调用顺序为:父类静态方法、  子类静态方法、父类构造方法、子类构造方法、一般方法谁先调用,谁先执行;                              测试代码:                                                   public class TestStatic {                                   
Java子类调用父类的构造方法(父类无参数构造方法和父类有参数构造方法)
package com.kai.test; public class A { public String name; public A(){ System.out.println("父类的无参数构造方法"); } public A(String str){ this.name=str; System.out.println("父类的有参数构造方法"); } } ...
子类调用父类构造方法的问题?
如下关于static方法运行结果为? rnpublic class Hello extends BaseClass rn public static void main(String[] arg) rn new Hello(); rn rnrn public final static void test() rn System.out.println("Hello"); rn rn rnrnclass BaseClass rn BaseClass() rn test(); rn rn public static void test() rn System.out.println("BaseClass"); rn rnrn这个题运行的结果是baseclass。rn 我知道他是调用咯父类的构造函数,所以会输出baseclass,但是我在Hello里写了一个构造函数,他还是会先调用父类的构造函数,再调用自己再定义的构造函数,意思就是父类的构造函数和自身的构造函数都要调用,不解呀,子类是不是在没构造函数的时候,如果要用就会调用父类的?但是为什么子类自身有了构造函数,这里为什么他还要调用父类的构造函数??为什么呀??
子类构造方法调用父类的构造方法
<p>rn <br />rn</p>rn<p style="font-family:&quot;color:#3D3D3D;font-size:16px;background-color:#FFFFFF;">rn 扫码进入学习群,领取学习资料+讲师答疑rn</p>rn<div>rn <br />rn</div>rn<img src="https://img-bss.csdn.net/201908080328096578.png" alt="" /> rn<p>rn <br />rn</p>rn<p>rn <br />rn</p>rn<p>rn 本教程是C++ Primer Plus 6th 、The C++ Programming Language_4th、Thinking in C++等国外顶级的C++著作的精华和个人超过10年的C++使用经验的完美结合。rn</p>
子类父类构造方法执行顺序举例
using System; using System.Collections.Generic; using System.Linq; using System.Text; class A//new一个子类B的话,会先调用父类的构造函数,在调用子类的构造函数;然后,在调用子类的方法B.PrintFields(). {      public A()     {
父类与子类的静态代码块和构造方法的执行顺序
package test; /** * 要点: *    一:父类与子类的静态代码块和构造方法的执行顺序   *       [父类的静态代码块--&amp;gt;子类的静态代码块--&amp;gt;父类构造方法--&amp;gt;子类构造方法] *    二:静态代码块(static block ),不包含在任何方法体中。当类被载入时, *       自动执行静态代码块,且只被执行一次经常用于类...
Java 子类构造方法与父类构造方法的问题
子类带参构造方法与父类构造参数的问题 看一段代码 class Base{ public Base(String s){ System.out.print(&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;B&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;); } } public class Derived extends Bas
子类构造方法与父类构造方法在调用时的联系
class SuperClass { private int n; SuperClass(){ System.out.println("SuperClass()"); } SuperClass(int n) { System.out.println("SuperClass(int n)"); this.n = n; } } class SubClass
父类子类静态代码块,构造方法的执行顺序
执行顺序记住两个优先: 静态优先,父类优先! 代码:父类Apublic class A { //静态代码块 static{ System.out.println("父类的静态代码块"); } //父类的构造方法 public A(){ System.out.println("父类的构造方法"); } }代码:子类B
关于子类和父类的构造方法的问题
当子类调用无参构造函数时,该子类的无参构造函数在第一句默认调用了父类的无参构造函数,即下面两端代码是等价的 public class Child extends Parent { Child() { } } public class Child extends Parent { Child() { super(); } } 所以,如果子类拥有无参的构造函数,父类一定要有一个
Java 子类、父类变量、代码块、构造方法加载顺序
1       序言: Java中子类、父类变量,代码块,以及构造方法的加载顺序,是我们在程序开发中经常遇到的一个问题,也是比较容易混淆的。 2       正文 为此,我们先来分析一下,一个java程序的构成: 变量: 成员变量(静态变量又叫类变量、实例变量)和局部变量  方法: 成员方法和构造方法  代码块:普通代码块、构造代码块、静态代码块、同步代码块  想要弄清楚子类、父类变
java继承,子类构造方法赋值给父类对象
java继承,子类构造方法赋值给父类对象,通过该对象访问方法和变量的不同情况说明
把父类对象赋值给子类
public class myTcpClient: TcpClientrn rn public myTcpClient() : base()rn rn rn public Socket getClient()rn rn return this.Client;rn rn public bool isAlive()rn rn return this.Active; rn rn rn这是我的tcpclient的子类,我是想要获得他的client和active两个保护变量rn但tcpclient.acceptclient()返回的是tcpclient数据类型rnTcpClient c = (myTcpClient)clientListener.AcceptTcpClient();rn《-这样编译时候没有问题rn但执行时候就说指定的转换无效rn我要加个运算符重载吗?rnc#运算符重载格式怎么样的?还有tcpclient类要复制的话,要把哪几个变量的值复制呢rn
子类为什么不能调用父类构造方法?
网上版本很多 有的说能调用,有的说不能调用,请求专业回答谢谢!
子类为什么要继承父类的构造方法?
父类一大堆的构造函数,子类想使用默认的父类构造,但却需要继承每一个方法,然后使用super(参数);rn多麻烦呀!
在Java中子类能否重载父类的构造方法? ...
1,首先明确一点子类不能重载父类的构造方法 2,由于在java中类的构造函数与类的名称相同,不可能子类和父类使用相同的类名称,因此子类也就不能重载父类的构造函数,但子类可以通过super来调用父类的构造函数。 3,也就是在子类的构造方法里面使用 super() 的方法来调用父类; package javaClass; /* * 编写一个java程序,设计一个汽车类Vehicl...
java中子类重写父类构造方法问题
伪代码nnclass 子类 extends 父类 {nnsuper ()nn}nsuper可写可不写 反正不写也会执行是吧
使用Super调用父类的构造方法
/*一个类的构造函数的功能是给其成员变量赋值*/ package learnJava; class S{ int x,y; S(){ x=100; y=200; } S(int x,int y){ this.x=x; this.y=y; } } class R extends S{ int z; R(int x,int y){ ...
为什么子类的构造方法一定会调用父类的某个构造方法
首先我们要知道构造方法是类的一个特殊成员,它会在类实例化对象时被自动调用 子类中,它在调用父类中空参数的构造函数。因为子类继承父类,会继承到父类中的数据,所以必须要看父类是如何对自己的数据进行初始化的。所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程 定义一个Dog类继承自Animal类 Animal类中有一个有参构造方法,传入变量 name public cl
子类使用父类变量
class A rnvar $authKey='1111';rnrnrnrnclass B extends Arn __construct()rn echo parent::authKey;rnrnrn报错Undefined class constant 'authKey'
子类构造方法创建为什么要调用父类的构造方法
1.构造方法为为了初始化对象中的属性和方法 2.子类继承父类的成员变量,所以要先调用fuqi父类的构造方法和属性。
java 子类对象赋值给父类对象的使用
java 子类对象赋值给父类对象的使用,包括代码及详解,个人笔记
父类无参构造方法,有参构造方法于子类的使用
链接:https://www.nowcoder.com/questionTerminal/1fb1e18e57a64163bbb404f56555bb3a 来源:牛客网 父类对子类构造方法的影响: 如果父类拥有无参构造方法(无论隐式的还是显式的)且子类中的构造方法又没有明确指定调用父类的哪个构造方法,则子类中不必调用该子类其它构造方法的构造方法使用super()隐式调用父类的无参构造方法,...
小问题!如何在子类中写构造方法?并且子类的构造方法中用到父类的某个构造方法!
如题
子类和父类中的super、this的区别
在JAVA类中使用super来引用父类的成分,用this来引用当前对象,如果一个类从另外一个类继承,new这个子类的实例对象后。使用super来引用父类对象,使用this引用当前对象。       public class F{//定义父类    public void s(){//定义父类方法s    } } public class K extends
父类-子类的构造方法,构造代码块,静态代码块调用顺序
自定义父类 package day05.k08; public class MyObj { public MyObj() { System.out.println(&quot;A&quot;); } { System.out.println(&quot;B&quot;); } { System.out.println(&quot;C&quot;); } static { System.out.println(...
静态块,普通代码块,构造方法,父类、子类的初始化顺序
初始化顺序为: 1. 父类静态代码块 2. 子类静态代码块 3. 父类普通代码块 4. 父类构造方法 5. 子类普通代码块 6. 子类构造方法测试用例:class A { static { System.out.println("A static"); } public A() { System.out.println("A con
父类与子类的静态代码块、代码块、构造方法执行顺序
StaticTest.javapackage com.staticTest; /** * 测试静态代码块执行顺序 * 1、static能修饰的类只有静态内部类 * 2、静态方法不能直接访问非静态成员(方法,成员变量) * 3、静态代码块在类加载的时候,就直接加载,且只执行一次 * 4,执行顺序:父类静态代码块与静态成员--> * 子类静态代码块与静态成员--> *
子类对象构建调用父类的构造方法
程序中描述了子类对象构建调用父类的构造方法,以及类变量和实例变量创建的不同过程
AVA父类子类静态代码块、静态变量、构造方法的执行顺序
java中关于子类和父类的构造函数,静态代码块,普通代码块,静态成员变量和普通成员变量的初始化顺序 //父类: class parent{    public static String i=&quot;我是父类的静态成员变量&quot;;    public String j=&quot;我是父类普通的成员变量&quot;;    public parent() {         System.out.println(&quot;我是父...
子类和父类构造方法的执行先后问题
在java中如果一个类中没有显式的使用super()进行调用超类的构造方法,则在执行子类构造方法之前会首先待用父类的构造方法,如下:/** * Created by zhuxinquan on 15-11-24. */class Circle{ double radius = 10; public Circle(){ //this(0); Syst
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件