A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Liveei 中级黑马   /  2015-8-24 19:17  /  186 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、父类私有的成员不能被继承
2、父类的构造函数不能被继承
3、创建子类对象的时候会默认先调用父类的无参的构造函数。

(为什么要调用父类的构造方法?答案:初始化从父类继承下去的属性的!)
注意:调用和继承直接没有关系


3 创建子类对象的时候会默认先调用父类的无参的构造函数。(为什么要调用父类的构造方法?答案:初始化从父类继承下去的属性的!)

下面例子中,子类从父类继承name的属性,调用父类的构造方法就是为了初始化name属性的

class Person
{
String name;
private int age;

public Person(String name)
{

this.name=name;

    }

public Person()
{
System.out.println("person类的构造方法被调用了");

    }
public void eat()
{

System.out.println("在吃饭");

}


}

class Student extends Person
{
int num;
public Student()
{
System.out.println("Student类的构造方法被调用了");
    }
public void study()
{
System.out.println(name+"在学习");
    }

}

class Demo1
{
public static void main(String[] args)
{
  Student s=new Student();
}
}
person类的构造方法被调用了
Student类的构造方法被调用了


4.案例分析:

(1)

父类int x=10,子类int x=20;当创建对象 Zi z=new Zi("小头儿子");的时候,z内存地址所对应的内存内有两份数据,x=10和x=20,一份自身的一份从父类继承下来的  如下System.out.println("x2="+super.x);可以打印从父类继承的x

(2)创建子类对象的时候会默认先调用父类的无参的构造函数。这时候从父类继承下来的name属性初始化为空。要想初始化name不为空,就要调用父类有参的构造函数,即 public Fu(String name)
{
this.name=name;
System.out.println("父类有参的构造方法");
}

这就需要在子类构造函数中加一个 super(ame)




class Fu
{
int x=10;
String name;
public Fu(String name)
{
this.name=name;
System.out.println("父类有参的构造方法");
}
public Fu()
{
   System.out.println("弗雷无参的构造方法");
}


}
class Zi extends Fu
{
  int x=20;
  public Zi(String name)
{
  super(name);//zhiding调用父类一个参数的构造函数 ,若没有这句话,就会调用父类无参的构造函数
  System.out.println("子类的构造方法");
  }
  public void print()
{
  System.out.println("x1="+x);
  System.out.println("x2="+super.x);

  
  }
}
class Demo1
{
public static void main(String[] args)
{
  Zi z=new Zi("小头儿子"); //
  ////在对象里面是存在两份x的;z地址所指向的对象的内存内有两份x(一份自身的,一份是从父类继承下来的)!
  System.out.println("name"+z.name);//z.name初始化时null  若想对象一创建就初始化成一个非null的名字,需要调用父类不带参的构造方法(而子类一创建对象就默认调用父类带参的构造方法)
}
}


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马