本帖最后由 张权 于 2013-4-4 17:15 编辑
看楼主这个问题, 是前面的关于继承那里没学好啊!! 不知道楼主知不知道父类子对象这个概念? 这个意思就是每个子类都有一个父类对象, 这个父类对象帮助子类对象完成父类对象的功能,这样说吧, 当我们new一个子类对象时, 其实是先初始化父类对象, 那么要如何初始化父类对象呢, 其实是通过父类的功能来帮助子类完成初始化父类对象, 而你的super(name)其实就是初始化父类子对象的一个桥梁, ; 不知道这样你明不明白, 我再这样说吧, super(name)是不是在调用父类的有参构造器?这个你应该明白吧, 调用父类有参构造器之后, 那么你这个线程的父类是不是应该就有名字了? 那么父类有名字了, 那么你子类是不是可以继承过来? 如下代码:
class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
class Student extends Person {
public Student(String name) {
super(name);
}
}
class Demo {
public static void main(String[] args) {
Student s = new Student("zhangsan");
System.out.println(s.getName());
}
}
在这里我要说明一点, 平时我们说的私有属性不能够继承, 其实这种说法不完全正确, 其实私有属性是可以隐式继承的, 上述代码就验证了, 当然面试的时候, 你肯定得说私有属性不能够被继承, 要是你说能够被继承, 那你肯定挂了.
我再来详细解释一下这段代码吧, 这个代码父类Person类有一个name属性, 父类的name本来为null , 但是通过super(name) 父类的那么变为 "zhangsan"了, 那么子类通过 getName()方法是不是也获取了父类的名称"zhangsan", 其实这个就和线程的代码一回事, 线程的代码默认第一个是Thread-0, 而我这里的代码时null而已 , 算了我再把代码改一下, 这样更清晰一点:
class Thread {
private String name;
public Thread() {
name = "Thread-0";
}
public Thread(String name) {
this.name = name;
}
public String getName(){
return name;
}
}
class Test extends Thread {
public Test() {
super();
}
public Test(String name) {
super(name);
}
}
class Demo {
public static void main(String[] args) {
//这个就好比创建一个无参的线程;
Test t1 = new Test();
System.out.println(t1.getName());
//这个就好比创建一个有参的线程
Test t2 = new Test("zhangsan");
System.out.println(t2.getName());
}
}
|