Java中面向对象的特点(1):继承

本文详细介绍了Java中面向对象的继承特性,包括单一继承、多层继承、成员变量和方法的覆盖规则,以及构造方法的执行顺序。通过实例展示了如何在子类中访问父类的成员,并讨论了就近原则在成员变量和方法调用中的应用。
摘要由CSDN通过智能技术生成

Java中面向对象的特点(1):继承

	在现实中通俗点所谓的继承就是儿子继承父亲的财产。然而在Java程序中,继承所描述的是事物之间的所属关系,通过继承将多种事物联系在一起。
比如说,多个类中有相同的成员和方法,我们可以将这几个类共有的抽取到另一个类中,让多个类(子类)去继承这个类(父类),多个类(子类)也可以获取到这个类(父类)的成员。
程序中要想声明继承关系,需使用关键字extends;
注意:
  1. 子类不能继承父类的私有成员
  2. 单一继承,即一个父类一个子类
  3. 父类可以有多个子类;
  4. 多层继承 比如B继承A,C继承B,此时C既是B的子类也是A的子类

继承中的成员变量特点:

  • 如果子父类中的成员变量名相同时,创建子类 对象后,直接获取的是子类的成员变量,反之为父类
public class ExtendsDemon{
	public static void main(String[] args){
		Son s=new Son();
		s.show;	//输出大熊
	}

}
class Dad{	
	String name="雄安";
}
class Son extends Dad{
	String name="大熊";
	public void show(){
		System.out.println(name);
	}
}

此时会用到就近原则:

  1. 如果有局部变量时使用的是局部变量`
public class ExtendsDemon1{
	public static void main(String[] args){
		Son1 s1=new Son1();
		s1.show();
	}
}
class Dad1{
	String name="小熊";
}
class Son1 extends Dad1{
	String name="熊大";
	public void show(){
		String name="熊二";
		System.out.println(name);
	}
}
  1. 如果没有局部变量,有子类的成员变量使用的是子类的
public class ExtendsDemon3{
	public static void main(String[] args){
		Son3 s3=new Son3();
		s3.show();
	}
}
calss Dad3{
	String name="小雄";
}
class Son3 extends Dad3{
	String name="熊大";
	public void show(){
		System.out.println(name);
	}
}
  1. 如果没有局部变量和子类的成员变量,使用的是父类的

成员方法的特点:

  1. 子类中如果没有这个方法,则调用的是父类的;
  2. 子类重写这个方法后调用的是子类

继承中构造方法的执行顺序:
1.如果子类构造方法第一行没有调用父类构造或其他子类构造,则会先默认调用父类无参构造

public class ExtendsDemon4{
	public static void main(String[] args){
		Son4 s4=new Son4();
	}

}
class Dad4{
	public Dad4(){
		System.out.println("我是父类无参构造");
	}
	public Dad4(String name){
		System.out.println("我是父类有参构造");
	}
}
class Son4 extends Dad4{
	public Son4(){
		System.out.println("我是子类无参构造");
	}
	public Son4(String name){	
		System.out.println("我是子类有参构造");
	}
}
2.如果子类构造方法第一行调用的是当前对象的其他构造(A),则会先看(A)的第一行有没有调用父类构造,若无,则默认为无参构造
以下代码是对1的改写
class Son4 extends Dad4{
	public Son4(){
		this("大熊");
		System.out.println("我是子类无参构造");
	}
	public Son4(String name){
		System.out.println("我是子类有参构造");
	}
}
//运行结果为我是父类无参构造----我是子类有参构造----我是子类无参构造

3.如果子类构造中第一行使用了super关键字,则会执行完父类构造,再执行子类,同上

class Son4 extends Dad4{
	public Son4(){
		super();
		System.out.println("我是子类无参构造");
	}
	public Son4(Sring name){
		System.out.println("我是子类有参构造");
	}

}
//运行结果为 我是父类无参构造----我是子类无参构造
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值