java有参构造器问题
答案:4 悬赏:0 手机版
解决时间 2021-04-03 21:03
- 提问者网友:暗中人
- 2021-04-02 20:21
java有参构造器问题
最佳答案
- 五星知识达人网友:醉吻情书
- 2021-04-02 21:27
你的错误有2点:
1、你在子类arrorchild中的构造函数中使用super调用了父类arror的构造方法,所以当你new实例化子类的时候,所带入的参数都到父类中去了,你的子类中的a和b并没有被重新赋值。
2、就算赋值到父类中,其实也没什么,我们在子类中一样可以取出来用。
可以这样取父类的属性和方法:当有相同的属性或者方法时,this子类表示调用自己的属性或者方法,super调用父类的属性或者方法。当子类调用的属性方法在子类中不存在时,那么this和super都是调用父类的属性或者方法。
再来看看你的代码:你在父类中使用private修饰符修饰a和b,那么这样就出现问题了。private修饰的变量和方法,只能本类使用,即时是它的子类也是不可以使用的。所以,就算在子类arrorchild中使用super也是获取不到了。
1、你在子类arrorchild中的构造函数中使用super调用了父类arror的构造方法,所以当你new实例化子类的时候,所带入的参数都到父类中去了,你的子类中的a和b并没有被重新赋值。
2、就算赋值到父类中,其实也没什么,我们在子类中一样可以取出来用。
可以这样取父类的属性和方法:当有相同的属性或者方法时,this子类表示调用自己的属性或者方法,super调用父类的属性或者方法。当子类调用的属性方法在子类中不存在时,那么this和super都是调用父类的属性或者方法。
再来看看你的代码:你在父类中使用private修饰符修饰a和b,那么这样就出现问题了。private修饰的变量和方法,只能本类使用,即时是它的子类也是不可以使用的。所以,就算在子类arrorchild中使用super也是获取不到了。
全部回答
- 1楼网友:拾荒鲤
- 2021-04-03 00:40
你打印出来的是你arrorchid类里面的a和b。
- 2楼网友:不如潦草
- 2021-04-02 23:02
你继承使用有误。在父类里面定义了的a,b为私有的无法给子类继承过来。正确的写法应该如下
public abstract class arror{
protected int a;//protected
protected String b;//protected
public arror(int a,String b){
this.a=a; this.b=b;
}
public abstract void display();
}
public class arrorchild extends arror{
//private int a;
//private String b;
public void display(){
System.out.println("a:"+a+','+"b:"+b);
}
public arrorchild(int a,String b){
super(a,b);
}
public static void main(String[] args) {
arrorchild arr =new arrorchild(4,"child");
arr.display();
}
}
public abstract class arror{
protected int a;//protected
protected String b;//protected
public arror(int a,String b){
this.a=a; this.b=b;
}
public abstract void display();
}
public class arrorchild extends arror{
//private int a;
//private String b;
public void display(){
System.out.println("a:"+a+','+"b:"+b);
}
public arrorchild(int a,String b){
super(a,b);
}
public static void main(String[] args) {
arrorchild arr =new arrorchild(4,"child");
arr.display();
}
}
- 3楼网友:何以畏孤独
- 2021-04-02 22:38
你arrorchild 里面的private a,b. 都没被初始化.
你在arrorchild 的构造方法里面, 直接调用的是super(a,b). 并没有初始化你arrorchild 本身的a,b.
你想打印出来的话, 就把你arrorchild 里面 a, b删了, 然后把arror里面的a,b改成protect
你在arrorchild 的构造方法里面, 直接调用的是super(a,b). 并没有初始化你arrorchild 本身的a,b.
你想打印出来的话, 就把你arrorchild 里面 a, b删了, 然后把arror里面的a,b改成protect
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯