java代码继承疑惑,请有心人解答

总结:这段程序没有问题,编译运行都是可以的。关键是,子类的无参构造方法第一句少了super(a,b);运行后,显示了双重结果

。还有。如果子类中没有声明成员变量String  name.那么结果显示父类和子类的姓名都是一样的。来自与子类的无参构造方法,

里面传的值。当子类没有定义姓名时,它将继承父亲的属性,

package com.ad;

//重写、继承方法
class Kaai {
	String name;
	int age;

	public Kaai(String a, int b) {
		name = a;
		age = b;
	}

	public Kaai() {
		name = "mao";
		age = 44;
	}

	public void write1() {
		System.out.println("我可能叫:" + name + ",我的年龄是:" + age);
	}
}

class S extends Kaai {// 这里的类不能定义为public 公共类,为什么?
	String name;// 果然是这一句啊。省了这句。那么程序就变了。意思:子类的姓名源于父类中的姓名,继承父类的属性
	int id;// 如果默认String name不写出啦。则如果不在子类声明姓名,那么调用的时候,构造方法

	public S(String a, int b, int c) {
		// super(a,b);我发现少了这一句,结果显示会增加相同的行来显示,重复了。但是为什么呢?
		// 继承就是子类把父类的东西,属性,方法拿来用啊。这里的有参构造方法指的是什么呢?,不调用怎么会这样恩?
		name = a;// super永远是指,当前类的直接父类对象,继承父类的属性
		// TODO Auto-generated constructor stub
		id = b;

		age = c;
	}

	// /子类中的有参构造方法并没有继承父类super()。语句。那么父类的属性还是自己类的。
	// 如果子类中调用了父类的有参构造方法,那么可以使用赋值后的属性值
	// 我想调用父类的方法,这个名字是我定
	public S() {// 这里的父类的属性为什么不能用?、//调用父类的有参构造方法
		super("lfghfdgang", 23);// super永远指代当前类的直接父类对象,这里姓名不能继承。子类父类均相同了。
		name = "gappng";// 调用父类的有参构造方法
		// 首先子类先调用父类的构造方法,在调用自己的//子类用子类的属性方法。
		// age = 88;// 子类中的这个姓名不是自己的姓名,而是父类的。继承的。所以子类的姓名不可能是
		id = 123;// 这样子类中的姓名和年龄来自于父类,所以当然和父类相同了

	}// 这个age:子类中没有,所以它是继承父类的。姓名是自己的。子类没有继承。

	public void write() {
		System.out.println("我的学号是:" + id + "我的姓名是:" + name + "我的年龄是:" + age);
		// System.out.println("父类的姓名:"+super.name);
	}

}

  

原文地址:https://www.cnblogs.com/langlove/p/3438590.html