继承和重写

1、继承及关键字super

继承是从已有的类中派生出来的新的类—>包含原有的内容,并进行了扩展,即 继承 = 吸收+扩展。

无规矩不成方圆,继承也必须遵从一些原则:

(1)只能是单继承,即只能有一个父类,向上追溯时是一条单线;

(2)必须包含父类的所有内容,即你有的我全部都要。

需要注意的一点是,private的内容也是继承了过来,但是依然是private的,即语法上依然不允许程序员对其进行访问

既然要发展,那么就有添加和更改(删除不被允许,因为要满足上述第2条原则)。对于添加,只要满足语法定义,都是可以的;对于更改,就是重写的问题。其中都有可能会涉及到使用父类的方法的问题,这时就需要使用关键字super,super使用原则如下:

1)如果不写出来,每个子类构造方法的第一条语句默认是隐含地调用super();

2)如果写出来,则super();语句必须是构造函数中的第一条语句;(即i++; super(); // error) //满足第一条原则

3)一个构造函数中不能写多个super(参数列表) //类似于if...else if...else if...

2、重写

重写是在子类中重新定义父类中已有的方法。重写的方法必须和被重写的方法具有相同的名称、参数列表和返回值类型。当覆盖方法时,不能使用比父类更为严格的访问权限。(涉及到多态的内容)

在重写中,想到一个小问题:在子类中,调用一个方法,只用方法名调用时,采用的是子类的方法还是父类的方法?(猜想:采用的是子类的方法,不然重写就没有意义)

/* 重写中如果重写了父类中的两个构造函数,并在一个中调用了,会出现什么情况?
 * */
class A {
	int i=10;
	public void show () {
		System.out.println("调用的是父类中的无参构造函数");
	}
	public void show (int i) {
		System.out.println("调用的是父类中的有参构造函数");
	}
}

class B extends A {
	public void show () {
		super.show();	//【注意super的使用】
		show(i);//【只使用方法名来调用】
		System.out.println("调用的是子类中的无参构造函数");
	}
	public void show (int i) {
		System.out.println("调用的是子类中的有参构造函数");
	}
}
public class rewrite {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		B b = new B ();
		b.i = 10;
		b.show();
		b.show(b.i);
	}

}
/*运行结果:
(1)子类B中无对有参的重写
调用的是父类中的无参构造函数
调用的是父类中的有参构造函数
调用的是子类中的无参构造函数
调用的是父类中的有参构造函数
调用的是子类中的有参构造函数
(2)子类B中有对有参的重写
调用的是父类中的无参构造函数
调用的是子类中的有参构造函数
调用的是子类中的无参构造函数
分析:构造函数的调用(访问)以最近的为准则【子类有则用子类,子类无则用父类】
 * */
结果: 使用子类中的方法,当子类中没有时,转向父类

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值