黑马程序员技术交流社区

标题: 一个基础的继承调用问题 [打印本页]

作者: 桃华月禅    时间: 2014-11-26 00:32
标题: 一个基础的继承调用问题
  1. class Person
  2. {
  3.         private String name;
  4.         Person(String name){
  5.                 this.name = name;
  6.         }

  7.         public String getName(){
  8.                 return name;
  9.         }
  10. }

  11. class Student extends Person
  12. {
  13.         Student(String name){
  14.                 super(name);
  15.         }
  16. }

  17. class java
  18. {
  19.         public static void main(String[] args){
  20.                 Student s = new Student("haha");
  21.                 System.out.println(s.getName());
  22.         }
  23. }
复制代码


就是如上代码,为什么子类继承的方法能够调用父类的私有成员?

作者: sk0806    时间: 2014-11-26 00:55
因为子类构造函数的第一行有一条隐士的super()语句,用来调用父类中空参的构造函数
楼主继承这边在认真复习下,视频中有讲到
作者: yninggis    时间: 2014-11-26 00:58
其实是子类对象调用了父类的公有方法,然后该方法来调用父类的私有成员变量。
作者: 张卫贤    时间: 2014-11-26 00:59
因为用了父类用了this.name=name,子类直接继承了name
作者: 桃华月禅    时间: 2014-11-26 13:21
yninggis 发表于 2014-11-26 00:58
其实是子类对象调用了父类的公有方法,然后该方法来调用父类的私有成员变量。 ...

我也感觉是这样的,那么过去我对方法继承一直认识错了
继承父类共有方法后,其实子类方法就是在调用父类公有方法...
我过去还以为是把父类中的方法照抄下来...
作者: 桃华月禅    时间: 2014-11-26 17:37
sk0806 发表于 2014-11-26 00:55
因为子类构造函数的第一行有一条隐士的super()语句,用来调用父类中空参的构造函数
楼主继承这边在认真复 ...

我也知道构造函数第一行有隐式的super(),可是这个与能访问父类私有成员变量有关系吗?
作者: 桃华月禅    时间: 2014-11-26 17:53
sk0806 发表于 2014-11-26 00:55
因为子类构造函数的第一行有一条隐士的super()语句,用来调用父类中空参的构造函数
楼主继承这边在认真复 ...

我也知道构造函数第一行有隐式的super(),可是这个与能访问父类私有成员变量有关系吗?
作者: yninggis    时间: 2014-11-26 18:28
桃华月禅 发表于 2014-11-26 13:21
我也感觉是这样的,那么过去我对方法继承一直认识错了
继承父类共有方法后,其实子类方法就是在调用父类 ...

这应该是个继承的问题:子类继承父类时,子类就拥有了父类中公有的方法和公有成员变量。而子类不能拥有父类的私有方法和私有成员变量。
作者: wtjohn    时间: 2014-11-26 18:30
继承不仅是继承父类的方法啊,也包括其他成员啊...
作者: wtjohn    时间: 2014-11-26 18:34
本帖最后由 wtjohn 于 2014-11-26 18:37 编辑

public class Test2 extends Test1{
        public static void main(String[] args) {
                System.out.println(getname());
        }
}
class Test1
{
private static String name="hahaha";
public static String getname()
  {
     return name;
   }}

作者: wxnzb502    时间: 2014-11-26 21:01
如果没有写构造函数就会有默认的  如果写了 就不会再有默认的了。你这个代码中有代参的构造函数,然后子类在初始化的时候就通过super(name)调用了父类的构造函数,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2